void TEngineImp::OpenDevice(unsigned Number)
{
HDEVINFO hardwareDeviceInfo;
hardwareDeviceInfo = SetupDiGetClassDevsW((LPGUID)&GUID_SLAB_DEVICE_INTERFACE_CLASS, 0, 0, DIGCF_PRESENT | DIGCF_INTERFACEDEVICE);
if(INVALID_HANDLE_VALUE == hardwareDeviceInfo)
return;
SP_INTERFACE_DEVICE_DATA deviceInterfaceData;
deviceInterfaceData.cbSize = sizeof(SP_INTERFACE_DEVICE_DATA);
int i = 0;
do
{
if(SetupDiEnumDeviceInterfaces(hardwareDeviceInfo, 0, (LPGUID)&GUID_SLAB_DEVICE_INTERFACE_CLASS, i, &deviceInterfaceData))
{
PSP_INTERFACE_DEVICE_DETAIL_DATA deviceInterfaceDetailData;
ULONG predictedLength = 0;
ULONG requiredLength = 0, bytes = 0;
SetupDiGetInterfaceDeviceDetailW(hardwareDeviceInfo, &deviceInterfaceData, 0, 0, &requiredLength, 0);
predictedLength = requiredLength;
deviceInterfaceDetailData = (PSP_INTERFACE_DEVICE_DETAIL_DATA) malloc(predictedLength);
deviceInterfaceDetailData->cbSize = sizeof(SP_INTERFACE_DEVICE_DETAIL_DATA);
if(!SetupDiGetInterfaceDeviceDetailW(hardwareDeviceInfo, &deviceInterfaceData, deviceInterfaceDetailData, predictedLength, &requiredLength, 0))
{
free(deviceInterfaceDetailData);
SetupDiDestroyDeviceInfoList(hardwareDeviceInfo);
return;
}
if(i == Number)
{
m_SlabControl.hHandle = CreateFile(deviceInterfaceDetailData->DevicePath, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_FLAG_WRITE_THROUGH | FILE_FLAG_NO_BUFFERING, 0);
free(deviceInterfaceDetailData);
SetupDiDestroyDeviceInfoList(hardwareDeviceInfo);
return;
}
free(deviceInterfaceDetailData);
}
else
if(ERROR_NO_MORE_ITEMS == GetLastError())
{
SetupDiDestroyDeviceInfoList(hardwareDeviceInfo);
return;
}
}
while(true);
} ---
|