// 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;
}