Вот дожил до того, что припёрло написать драйвер. После пары синек проверил (DbgPrint/DebugView) в обработчике "IRP_MJ_DEVICE_CONTROL" поле "Tail.Overlay.CurrentStackLocation", а там NULL. Другими словами, при формировании пакета запроса почему-то не выделяется стёк. Вроде всё делал как пишут в интернетах. Если не трудно, гляньте, может я что-то напутал. создание устр-ва: Code: RtlInitUnicodeString(&usDevName, "\Device\<имя устр-ва>"); IoCreateDevice(DriverObject, 0, &usDevName, FILE_DEVICE_UNKNOWN, 0, FALSE, &pdo); RtlInitUnicodeString(&usLinkName, "\??\<имя устр-ва>"); IoCreateSymbolicLink(&usLinkName, &usDevName); открытие устр-ва: Code: hFile = CreateFileA("\\.\<имя устр-ва>", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); обращение к устр-ву: Code: // 0x22E00F = CTL_CODE(FILE_DEVICE_UNKNOWN, 0x0803, METHOD_NEITHER, FILE_READ_ACCESS | FILE_WRITE_ACCESS) DeviceIoControl(hFile, 0x22E00F, &in_buf, 4, &out_buf, 4, &tmp); METHOD_NEITHER на METHOD_BUFFERED менял - та же петрушка, хотя адрес в "AssociatedIrp.SystemBuffer" вполне допустимый (0x8???????), но читать/писать не рискнул, а вот в первом варианте "UserBuffer"=NULL.