Hi there!
I'm trying to make my own ioctl driver command for calling it from an user-mode application dll. For now I just wanted to make sure the dll succesfuly calls that command on the driver code. So I defined my command (in the dll and in the driver's code) like this:
#define BUSENUM_IOCTL(_index_) \
CTL_CODE (FILE_DEVICE_BUS_EXTENDER, _index_, METHOD_BUFFERED, FILE_ANY_ACCESS)
...
#define IOCTL_DEBUG_LOG_INFO BUSENUM_IOCTL (0x4)
in the driver code, in my corresponding IRP_MJ_DEVICE_CONTROL function, I have something like this:
switch ( command )
{
case IOCTL_DEBUG_LOG_INFO:
KdPrint(("IOCTL_DEBUG_LOG_INFO:\n"));
if(devExt->Type==0)
{
status = STATUS_SUCCESS;
}
else
{
status=STATUS_INVALID_DEVICE_REQUEST;
KdPrint(("Wrong device on IOCTL_DEBUG_LOG_INFO command\n"));
}
break;
...
}
and in the dll code I'm calling the driver's command like this:
if (DeviceIoControl(h, IOCTL_DEBUG_LOG_INFO,
&debugLogInfoData, sizeof(DEBUG_LOG_INFO),
&debugLogInfoData, sizeof(DEBUG_LOG_INFO),
&junk, NULL))
{
CloseHandle(h);
...
return VDD_NO_ERROR;
}
PrintLastError(prefix);
return VDD_UNKNOWN_ERROR;
}
(where h is the handle initialized when I opened the stub driver (devExt->Type==0) )
but it always goes to the "VDD_UNKNOWN_ERROR" with the error code 1: Incorrect function
What am I doing wrong? ...
Help please!