// Get buffer size

 printf(' Test %d ',TestNo++);

 char* Buffer = new char[BufferSize+1];

 if (!DeviceIoControl(hWdm1, IOCTL_WDM1_GET_BUFFER,

  NULL, 0,// Input

  Buffer, BufferSize,// Output

  &BytesReturned, NULL)) printf('XXX Could not get buffer ');

 else printf(' First DWORD of buffer is %08X (%d bytes returned) ',*((DWORD*)Buffer),Bytes Returned);

 ///////////////////////////////////////////////////////////////////////

 // Get too big a buffer size

 printf(' Test %d ',TestNo++);

 if (!DeviceIoControl(hWdm1, IOCTL_WDM1_GET_BUFFER,

  NULL, 0,// Input

  Buffer, BufferSize+1,// Output

  &BytesReturned, NULL)) printf(' Too big get buffer failed correctly %d ',GetLastError());

 else printf('XXX Too big get buffer unexpectedly succeeded ');

 ///////////////////////////////////////////////////////////////////////

 // Zero all buffer bytes

 printf(' Test %d ',TestNo++);

 if (!DeviceIoControl(hWdm1, IOCTL_WDM1_ZERO_BUFFER,

  NULL, 0,// Input

  NULL, 0,// Output

  &BytesReturned, NULL)) printf('XXX Zero buffer failed %d ' ,GetLastError());

 else printf(' Zero buffer succeeded ');

 if (!DeviceIoControl(hWdm1, IOCTL_WDM1_GET_BUFFER,

  NULL, 0,// Input

  Buffer, BufferSize,// Output

  &BytesReturned, NULL)) printf('XXX Could not get buffer ');

 else printf(' First DWORD of buffer is %08X (%d bytes returned) n',*((DWORD*)Buffer),BytesReturned);

 ///////////////////////////////////////////////////////////////////////

 // Remove buffer

 printf(' Test %d ',TestNo++);

 if (!DeviceIoControl(hWdm1, IOCTL_WDM1_REMOVE_BUFFER,

  NULL, 0,// Input

  NULL, 0,// Output

  &BytesReturned, NULL)) printf('XXX Remove buffer failed %d ',GetLastError());

 else printf(' Remove buffer succeeded ');

 if (!DeviceloControl(hWdm1, IOCTL_WDM1_GET_BUFFER_SIZE,

  NULL, 0,// Input

  &BufferSize, sizeof(ULONG),// Output

  &BytesReturned, NULL)) printf('XXX Could not get buffer size ');

 else printf(' Buffer size is %i (%d bytes returned) ',BufferSize,BytesReturned);

 ///////////////////////////////////////////////////////////////////////

 // Unrecognised IOCTL

 printf(' Test %d ',TestNo++);

 if (!DeviceIoControl(hWdm1, IOCTL_WDM1_UNRECOGNISED,

  NULL, 0,// Input

  NULL, 0,1/ Output

  &BytesReturned, NULL)) printf(' Unrecognised IOCTL correctly failed %d ',GetLastError());

 else printf('XXX Unrecognised IOCTL unexpectedly succeeded ');

 ///////////////////////////////////////////////////////////////////////

 // Write 0xabcdef01 to start of buffer

 printf(' Test %d ',TestNo++);

 dwNewPtr = SetFilePointer(hWdm1, 0, NULL, FILE_BEGIN);

 if (dwNewPtr==0xFFFFFFFF) printf('XXX SetFilePointer failed %d ',GetLastError());

 else printf(' SetFilePointer worked ');

 Wvalue = 0xabcdef01;

 if (!WriteFile(hWdm1, &Wvalue, 4, &TxdBytes, NULL)) printf('XXX Could not write %X ', Wvalue);

 else if( TxdBytes==4) printf(' Write 0xabcdef01 succeeded ');

 else printf('XXX Wrong number of bytes written: %d ',TxdBytes);

 /////////////////////////////////////////////////////////////////////////

 // Close device

 printf(' Test %d ',TestNo++);

 if (!CloseHandle(hWdm1)) printf('XXX CloseHandle failed %d ', GetLastError());

 else printf(' CloseHandle worked ');

 /////////////////////////////////////////////////////////////////////////

 delete Buffer;

 printf(' Press enter please');

 char line[80];

 gets(line);

 return 0;

}

//////////////////////////////////////////////////////////////////////////

//GetDeviceViaInterface:Open a handle via a device interface

HANDLE GetDeviceViaInterface(GUID* pGuid, DWORD instance) {

 // Get handle to relevant device information set

 HDEVINFO info = SetupDiGetClassDevs(pGuid, NULL, NULL, DIGCF_PRESENT | DIGCF_INTERFACEDEVICE);

 if (info==INVALID_HANDLE_VALUE) {

  printf('No HDEVINFO available for this GUID ');

  return NULL;

 }

 // Get interface data for the requested instance

 SP_INTERFACE_DEVICE_DATA ifdata;

 ifdata.cbSize = sizeof(ifdata);

 if (!SetupDiEnumDeviceInterfaces(info, NULL, pGuid, instance, &ifdata)) {

  printf('No SP_INTERFACE_DEVICE_DATA available for this GUID instance ');

  SetupDiDestroyDeviceInfoList(info);

  return NULL;

 }

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату
×