Здравствуйте.
Не подскажет ли кто можно ли обратится к какому-либо драйверу по IOCTL или как иначе внутри другого драйвера?
Здравствуйте Аноним, Вы писали:
А>Здравствуйте.
А>Не подскажет ли кто можно ли обратится к какому-либо драйверу по IOCTL или как иначе внутри другого драйвера?
PVOID pfnDriverControlDispatch = NULL;
PDEVICEINFO pdi = VXDLDR_GetDeviceList();
while (pdi)
{
if (pdi->DI_ModuleName && stricmp(pdi->DI_ModuleName, "DRIVERNAME") == 0)
{
PVOID pfnDriverControlDispatch = (PVOID) pdi->DI_DDB->DDB_Control_Proc;
break;
}
pdi = pdi->DI_Next;
}
ASSERT(pfnDriverControlDispatch)
DIOCParams ioctl;
memset(&ioctl, 0, sizeof(DIOCParams));
ioctl.dwIoControlCode = //...
ioctl.lpvInBuffer = //...
ioctl.cbInBuffer = //...
ioctl.lpvOutBuffer = //...
ioctl.cbOutBuffer = //...
DWORD dwError = ERROR_SUCCESS;
_asm mov eax, W32_DEVICEIOCONTROL
_asm lea esi, ioctl
_asm call [pfnDriverControlDispatch]
_asm mov dwError, eax
Здравствуйте Vovkos, Вы писали:
V>сорри, очепятка вкралась =)
V>конечно надо
V>pfnDriverControlDispatch = (PVOID) pdi->DI_DDB->DDB_Control_Proc;
V>а не
V>PVOID pfnDriverControlDispatch = (PVOID) pdi->DI_DDB->DDB_Control_Proc;
Большое спасибо, давно искал.
Здравствуйте Vovkos, Вы писали:
А>>Не подскажет ли кто можно ли обратится к какому-либо драйверу по IOCTL или как иначе внутри другого драйвера?
V>V>PVOID pfnDriverControlDispatch = NULL;
V>PDEVICEINFO pdi = VXDLDR_GetDeviceList();
V>while (pdi)
V>{
V> if (pdi->DI_ModuleName && stricmp(pdi->DI_ModuleName, "DRIVERNAME") == 0)
V> {
V> PVOID pfnDriverControlDispatch = (PVOID) pdi->DI_DDB->DDB_Control_Proc;
V> break;
V> }
V> pdi = pdi->DI_Next;
V>}
V>ASSERT(pfnDriverControlDispatch)
V>
V>DIOCParams ioctl;
V>memset(&ioctl, 0, sizeof(DIOCParams));
V>ioctl.dwIoControlCode = //...
V>ioctl.lpvInBuffer = //...
V>ioctl.cbInBuffer = //...
V>ioctl.lpvOutBuffer = //...
V>ioctl.cbOutBuffer = //...
V>DWORD dwError = ERROR_SUCCESS;
V>_asm mov eax, W32_DEVICEIOCONTROL
V>_asm lea esi, ioctl
V>_asm call [pfnDriverControlDispatch]
V>_asm mov dwError, eax
V>
Официальных упоминаний об этом я не видел, но тем не менее практика показывает, что еще нужно сделать
_asm mov ecx, ioctl.dwIoControlCode
Очень многие драйвера используют значение в регистре ecx.