Điều này thật kỳ lạ. Trước đó, chạy Windows 7 x64, tôi gặp sự cố khi gọi Win32 OpenProcess với các quy trình 64 bit. Googled xung quanh một chút, và đi đến kết luận chìm này sẽ không xảy ra.OpenProcess trên hình ảnh x64 từ ứng dụng Win32
Sau đó, một điều buồn cười đã xảy ra. Tôi đã thử nó với ID tiến trình cho explorer.exe, và cá chép thánh, nó đã hoạt động! Bắt đầu ném các ID quá trình khác vào nó, và nó chỉ là một crapshoot darned.
Khi nó quay ra, tôi có thể gọi OpenProcess chống lại một số lượng tốt của các quá trình x64 - nhà thám hiểm, itype, ipoint, taskhost, cmd, mstsc, ..., vv
Và những người khác bật số 5 (Quyền truy cập bị từ chối) - winlogon, csrss, services, svchost, mdm, ...
Tôi xác nhận ID "bitness" và quá trình sử dụng Process Explorer. Ngoài ra, việc gọi GetModuleFileNameEx trên các quy trình 64 bit luôn không thành công, do đó cung cấp kiểm tra kép cho 32/64.
Đây là mã:
' 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
Không có gì lạ mắt. Chỉ muốn truy vấn các quy trình cho những thứ như tên tệp hoặc thời gian xử lý. Bất cứ ai có bất kỳ ý tưởng gì khác biệt giữa những người tôi có thể mở và những người tôi không thể?
Thông tin bổ sung: Quy trình chạy với tư cách quản trị viên. Đã tắt UAC. Vâng, đó là ứng dụng 32 bit. Tôi không có kết quả tốt hơn bằng PROCESS_QUERY_LIMITED_INFORMATION.
Cảm ơn ... Karl
Ouch. Vâng, đó là nó, được rồi. Điều đó đã kích hoạt GetProcessTimes lần. Tôi thấy Process Explorer cũng đang chạy với cài đặt đó. Vì vậy, nếu tôi chạy nó dưới một tài khoản người dùng ít riêng tư, nó cũng không thể làm được điều này? Dù sao, cảm ơn! :-) –
Vài nhóm có SeDebugPrivilege theo mặc định, về cơ bản chỉ là SYSTEM và nhóm quản trị viên. Người dùng đặc quyền ít nhất chắc chắn không. Nếu họ đã làm, nâng lên đặc quyền đầy đủ sẽ là tầm thường kể từ khi bạn có thể tiêm mã bạn muốn chạy vào một quá trình đặc quyền. – Michael
Trước khi đến bài viết này, tôi nghĩ rằng tôi sẽ phải xây dựng riêng biệt trong kịch bản của tôi nhưng nhờ SeDebugPrivilege, bây giờ tôi có thể gọi openprocess từ một quá trình 32bit và tải một quá trình 64bit trong trường hợp của tôi im có thể tải lsass. – Syler