Те что скриншот кинуть? Ни хрена у меня не стоит ... никакого креста.
Ладно замяли. Я тут вот что нашел:
http://asm.udm.ru/platforms/windows/wdm/chapter3.htmЭто по идее глава 3 от первого издания книги Walter Oney. На русском языке. Я бы сказал поточнее, но у меня не может загрузиться страница целиком. Такой уж интернет. Но содержаниее имеется полностью. Думаю это вообще книжка целиком. Думаю тебе эта ссылка пригодится как и многим другим, кто интересуется дровами.
Ну и вопрос.
Как выполнить запрос в драйвере и вернуть нечто приложению.
Например у меня в самом драйвере по DeviceID и VendorID ищется наличие PCI карты. Карта эти значения возвращает. Так вот такой вопрос.
Естиь функция
BOOL FindPCI(ULONG Vend, ULONG Device).
Из приложения я вызываю эту функцию через DeviceIoControl
..........
#define IO_FIND_DEVICE (ULONG) CTL_CODE(FILE_DEVICE_DOCREADER_DRIVER, 0x806, METHOD_NEITHER, FILE_ANY_ACCESS)
......
BOOL MainWindow::OnDeviceExists(ULONG dVendorID, ULONG dDeviceID)
{
DWORD dwReturn;
ULONG DeviceInfo=MAKELONG(dVendorID,dDeviceID);
void* bExists;
if(m_hDevice)
{
DeviceIoControl(
m_hDevice,
IO_FIND_DEVICE,
(void*)DeviceInfo,
sizeof(DeviceInfo),
&bExists,
sizeof(bExists),
&dwReturn,
NULL);
}
return
??;
}
....
Вот. Что должен сделать драйвер вутри функции обработки IO_FIND_DEVICE
NTSTATUS DocReader_IoControl(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp )
{
NTSTATUS status = STATUS_SUCCESS;
ULONG controlCode;
PIO_STACK_LOCATION irpStack;
HANDLE hEvent;
OBJECT_HANDLE_INFORMATION objHandleInfo;
LONG* outBuf;
DWORD dInfo=0;
irpStack = IoGetCurrentIrpStackLocation(Irp);
controlCode = irpStack->Parameters.DeviceIoControl.IoControlCode;
switch(controlCode)
{
.....
case IO_FIND_DEVICE:
DocReader_FindDevice(
);
break;
default:
break;
}
Irp->IoStatus.Status = STATUS_SUCCESS;
Irp->IoStatus.Information = 0;
IoCompleteRequest(Irp, IO_NO_INCREMENT);
return status;
}
.............
NTSTATUS DocReader_FindDevice(
??)
{
BOOL bFind;
PCI_IO PciIo;
bFind=PciIo.FindDevice();
return
;
}
Другими словами. Я спрашиваю у драйвера через DeviceIoControl есть ли устройство с переданными VendorID и DeviceID. Драйвер в ответт вызывает свою внутреннюю функцию и отвечает приложению через переданный bExists есть или нет такое устройство. Я что то уже запарился и плохо соображаю. Во внутренних параметрах больно дофига всего и разобраться в этом не представляется возможным.
Вопрос как реализовать.