Добрый день коллеги, братья, друзъя и единомышленники. Написал драйвер и приложение которе юзает этот драйвер через вызовы IOCTL, а вот понять как передать данные из драйвера в приложение не могу, и соотвественно как передать данные из приложения в драйвер. Прошу помощи в разъяснении данной темы. Заранее благодарен lisij
В DeviceIoControl есть указатель на входной и выходной буфера, соответственно и их длина. Вот через эти буфера передавай данные
Вот кусок кода, который работает: #include "Winioctl.h" #include "stdlib.h" #define IOCTL_READ_OBJ_INFO CTL_CODE(FILE_DEVICE_UNKNOWN, 0x800, METHOD_BUFFERED, FILE_ANY_ACCESS) typedef struct { // в драйвер передаём адрес объекта, которого хотим прощупать (это входной буфер) PVOID ObjAddr; } RMD_IN; typedef struct { // имя устройства ассоциированного с объектом (это выходной буфер) char Name[256]; } RMD_OUT; // соответственно в драйвере тоже должны быть описаны эти структуры и IOCTL_READ_OBJ_INFO int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){ ................................ HANDLE HDrv=CreateFile("\\\\.\\Protect",GENERIC_ALL,0,NULL,OPEN_EXISTING,NULL ,NULL); RMD_IN rmd_in; RMD_OUT rmd_out; ULONG LBytesRecvd; rmd_in.ObjAddr=(PVOID)system_handles->Information.Object; DeviceIoControl(HDrv,IOCTL_READ_OBJ_INFO,&rmd_in,sizeof(RMD_IN),&rmd_out,sizeof(RMD_OUT),&LBytesRecvd,NULL); ..................................... return 0; }