S
skyou
Unregistered / Unconfirmed
GUEST, unregistred user!
//这是一个HOOK DeviceIoControl函数的其中一个过程,其中省略了一点代码。
function MyDeviceIoControl(hDevice: THandle; dwIoControlCode: DWORD; lpInBuffer: Pointer;
nInBufferSize: DWORD; lpOutBuffer: Pointer; nOutBufferSize: DWORD;
var lpBytesReturned: DWORD; lpOverlapped: POverlapped): BOOL; stdcall;
var
aIdOutCmd: array[0..(SizeOf(TSendCmdOutParams) + 512 - 1) - 1] of Byte;
IdOutCmd: TSendCmdOutParams absolute aIdOutCmd;
begin
HookNum.Restore;
if dwIoControlCode = $0007C088 then
begin
//★重点: 怎么将Pointer型的缓冲区lpOutBuffer,赋值给数组型的aIdOutCmd ????
WriteToFile('----------------------------------');
WriteToFile('dwIoControlCode: ' + inttohex(dwIoControlCode, 2)); //得到的是$0007C088
WriteToFile('nOutBufferSize: ' + inttostr(nOutBufferSize)); //得到的是528
//最后输出aIdOutCmd的结果
end;
result := DeviceIoControl(hDevice, dwIoControlCode, lpInBuffer,
nInBufferSize, lpOutBuffer, nOutBufferSize, lpBytesReturned, lpOverlapped);
HookNum.Change;
end;
function MyDeviceIoControl(hDevice: THandle; dwIoControlCode: DWORD; lpInBuffer: Pointer;
nInBufferSize: DWORD; lpOutBuffer: Pointer; nOutBufferSize: DWORD;
var lpBytesReturned: DWORD; lpOverlapped: POverlapped): BOOL; stdcall;
var
aIdOutCmd: array[0..(SizeOf(TSendCmdOutParams) + 512 - 1) - 1] of Byte;
IdOutCmd: TSendCmdOutParams absolute aIdOutCmd;
begin
HookNum.Restore;
if dwIoControlCode = $0007C088 then
begin
//★重点: 怎么将Pointer型的缓冲区lpOutBuffer,赋值给数组型的aIdOutCmd ????
WriteToFile('----------------------------------');
WriteToFile('dwIoControlCode: ' + inttohex(dwIoControlCode, 2)); //得到的是$0007C088
WriteToFile('nOutBufferSize: ' + inttostr(nOutBufferSize)); //得到的是528
//最后输出aIdOutCmd的结果
end;
result := DeviceIoControl(hDevice, dwIoControlCode, lpInBuffer,
nInBufferSize, lpOutBuffer, nOutBufferSize, lpBytesReturned, lpOverlapped);
HookNum.Change;
end;