To jest dziwne. Wcześniej, z systemem Windows 7 x64, miałem problem z wywołaniem Win32 OpenProcess przeciwko procesom 64-bitowym. Googli trochę i doszli do wniosku, że tak się nie stanie.OpenProcess na obrazach x64 z aplikacji Win32
Potem wydarzyła się zabawna rzecz. Próbowałem go przeciwko ID procesu dla explorer.exe, i święte karpie, zadziałało! Zaczęło się wrzucać do niego inne identyfikatory procesów, a to po prostu cholerny crapshoot.
Jak się okazuje, mogę zadzwonić OpenProcess na dużą liczbę procesów x64 - Explorer iType, Ipoint, taskhost, cmd, mstsc, ..., itd
A inni pop 5 (Odmowa dostępu) - winlogon, csrss, services, svchost, mdm, ...
Potwierdzam "bitness" i identyfikator procesu za pomocą Process Explorer. Ponadto wywoływanie funkcji GetModuleFileNameEx w procesach 64-bitowych zawsze kończy się niepowodzeniem, dzięki czemu oferuje podwójną kontrolę w trybie 32/64.
Jest to kod:
' Get a handle to the process.
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION Or PROCESS_VM_READ, 0, ProcessID)
If hProcess Then
' Grab the filename for base module.
nChars = GetModuleFileNameEx(hProcess, 0, Buffer, Len(Buffer))
' If running in x64, http://winprogger.com/?p=26
If Err.LastDllError = ERROR_PARTIAL_COPY Then
nChars = GetProcessImageFileName(hProcess, Buffer, Len(Buffer))
End If
' Truncate and return buffer.
If nChars Then
GetProcessFileName = Left$(Buffer, nChars)
End If
Call CloseHandle(hProcess)
Else
Debug.Print "LastDllError:"; Err.LastDllError
End If
Nic nadzwyczajnego. Po prostu chcesz zapytać procesy o takie rzeczy jak nazwa pliku lub czas procesu. Czy ktoś ma pojęcie, co odróżnia te, które mogę otworzyć, od tych, których nie mogę?
Dodatkowe informacje: Uruchomiony proces jako administrator. UAC wyłączony. Tak, to aplikacja 32-bitowa. Nie miałem lepszych wyników przy użyciu PROCESS_QUERY_LIMITED_INFORMATION.
Dzięki ... Karl
Ouch. Tak, w porządku, w porządku. To również umożliwiło GetProcessTimes razy. Widzę, że Process Explorer działa również z tym ustawieniem. Tak więc, jeśli miałbym uruchomić to pod kontem użytkownika najmniejszego prywatnego konta, to też nie mógł tego robić? W każdym razie, dzięki! :-) –
Niewiele grup ma domyślnie SeDebugPrivilege, w zasadzie tylko SYSTEM i grupę administratorów. Najmniej uprzywilejowani użytkownicy zdecydowanie tego nie robią. Gdyby tak było, podniesienie do pełnego przywileju byłoby trywialne, ponieważ możesz wprowadzić kod, który chcesz uruchomić w uprzywilejowanym procesie. – Michael
Zanim przejdę do tego posta, pomyślałem, że będę musiał stworzyć osobne kompilacje w moim scenariuszu, ale dzięki SeDebugPrivilege mogę teraz wywołać openprocess z 32-bitowego procesu i załadować 64-bitowy proces w moim przypadku, im będzie mógł załadować lsass. – Syler