问题
I try to add some string (fake device) to Windows Device Manager. I tried this code but it doesn't work:
procedure AddSomeString(AHandle:THandle);
var
vItem: TLVItemW;
vPointer,vPointerText:Pointer;
vNumberOfBytesRead,vProcessId: SIZE_T;
vProcess: THandle;
vBuffer: array[ 0..255 ] of Char;
begin
GetWindowThreadProcessId( AHandle, @vProcessId );
vProcess := OpenProcess( PROCESS_ALL_ACCESS, False, vProcessId );
vPointer := VirtualAllocEx( vProcess, nil, 4096, MEM_RESERVE or MEM_COMMIT, PAGE_READWRITE );
vPointerText := VirtualAllocEx( vProcess, nil,256,MEM_RESERVE or MEM_COMMIT,PAGE_READWRITE );
vBuffer := 'Test';
with vItem do
begin
mask := LVIF_TEXT;
iItem := 0;
iSubItem := 0;
cchTextMax := SizeOf( vBuffer );
pszText := vPointerText;
end;
WriteProcessMemory( vProcess, vPointer, @vItem, SizeOf( TLVItemW ), vNumberOfBytesRead );
WriteProcessMemory( vProcess, vPointerText, @vBuffer[ 0 ], SizeOf( vBuffer ), vNumberOfBytesRead );
SendMessage( AHandle, LVM_INSERTITEM, 0, lparam( vPointer ) );
SendMessage( AHandle, LVM_SETITEMTEXT, 0, lparam( vPointer ) );
VirtualFreeEx(vProcess, vPointer, 0, MEM_RELEASE);
VirtualFreeEx(vProcess, vPointerText, 0, MEM_RELEASE);
CloseHandle(vProcess);
end;
I am passing to the function handle of SysTreeView32, but SendMessage is always = 0
Can anyone suggest a working example?
来源:https://stackoverflow.com/questions/65414469/add-fake-device-to-windows-device-manager