/*++ Copyright (c) 1991 Microsoft Corporation Module Name: chngcnt.c Abstract: User mode program to retrive media change counts from a scsi driver Author: 13-May-1995 Peter Wieland (peterwie) Revision History: --*/ #include #include #include #include #include #include "..\..\..\..\inc\ntddvdm.h" int __cdecl main(int argc, char *argv[]) { HANDLE h; ULONG in; ULONG out; ULONG bytesBack; UCHAR cmd; ULONG num; UCHAR buf[128]; ULONG ioctlCode; h = CreateFile(argv[1], GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if(h == INVALID_HANDLE_VALUE) { printf("Error [%d] opening device %s\n", GetLastError(), argv[1]); return -1; } do { printf("Command>"); fflush(stdout); if((gets(buf) == NULL) && (feof(stdin))) { printf("EOF - exiting\n"); break; } cmd = 'x'; num = 75; bytesBack = 0; in = out = 0xff; sscanf(buf, "%c %d", &cmd, &num); switch(cmd) { case 'c': { printf("IOCTL_VDM_PAR_WRITE_CONTROL_PORT %d\n", num); ioctlCode = IOCTL_VDM_PAR_WRITE_CONTROL_PORT; in = num; break; } case 's': { printf("IOCTL_VDM_PAR_READ_STATUS_PORT\n"); ioctlCode = IOCTL_VDM_PAR_READ_STATUS_PORT; out = 0; break; } case 'w': { printf("IOCTL_VDM_PAR_WRITE_DATA_PORT %d\n", num); ioctlCode = IOCTL_VDM_PAR_WRITE_DATA_PORT; in = num; break; } case 'q': { printf("Quitting\n"); goto Done; break; } default: { printf("Unknown command %c\n", cmd); ioctlCode = 0; break; } } if(ioctlCode == 0) { continue; } if(!DeviceIoControl(h, ioctlCode, &in, sizeof(in), &out, sizeof(out), &bytesBack, NULL )) { printf("Error [%d] sending ioctl\n", GetLastError()); continue; } else { printf("Ioctl sent - %d bytes back - %d back\n", bytesBack, out); } } while(TRUE); Done: CloseHandle(h); return 0; }