|
我現在遇到這樣一個問題,還請大家給點建議:
在應用程序中,我們動態調用驅動的順序一般是:
1.調用CreateService(),裝入驅動;
2.調用OpenService(),啟動驅動;
3.調用CreateFile(),建立設備句柄;
4.執行DeviceIoControl(),調用驅動提供的IOCTL CODE;
5.關閉設備句柄;
6.調用ControlService(),停止驅動;
7.調用DeleteService(),卸載驅動;
我想知道的是
1.應用程序執行DeviceIoControl()時,提供的參數InputBuffer,OutputBuffer,與Driver中pIrpStack->Parameters->DeviceIoControl.InputBufferLength,pIrpStack->Parameters->DeviceIoControl.OutputBufferLength有什麼關係?
2.應用程序中DeviceIoControl()的InputBuffer,OutputBuffer與pIrp->AssociateIrp.SystemBuffer有什麼關係?
3.誰能解釋下這段代碼,代碼執行後的結果會是什麼?我對彙編實在...
void* pParam;
pParam = (DWORD*)pIrp->AssociatedIrp.SystemBuffer;
// start:
__asm
{
push eax
push esi
mov esi, pParam
mov eax, ds:[esi]
mov DMIFunction, ax
pop esi
pop eax
}
問題比較多,還請大家幫忙!
|
|