為什么WriteProcessMemory getlasterror總是487 是要先提權么??
hProcessId = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwProcessId);
if (hProcessId==NULL)
{
MessageBox(_T("OpenProcess失敗!"));
}
hRemoteDllPath = VirtualAllocEx(hProcessId, NULL, strlen(Dllname), MEM_COMMIT, PAGE_READWRITE);
if (hRemoteDllPath==NULL)
{
MessageBox(_T("VirtualAlocEc失敗!"));
}
if (WriteProcessMemory(hProcessId, hRemoteDllPath,Dllname, strlen(Dllname), &nSize)==0) //出錯 487前邊都正常
{
DWORD Derror=GetLastError();
MessageBox(_T("WriteProcessMemory失敗!"));
}
uj5u.com熱心網友回復:
bool AdjustPrivileges() {
HANDLE hToken;
TOKEN_PRIVILEGES tp;
TOKEN_PRIVILEGES oldtp;
DWORD dwSize=sizeof(TOKEN_PRIVILEGES);
LUID luid;
if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) {
if (GetLastError()==ERROR_CALL_NOT_IMPLEMENTED) return true;
else return false;
}
if (!LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &luid)) {
CloseHandle(hToken);
return false;
}
ZeroMemory(&tp, sizeof(tp));
tp.PrivilegeCount=1;
tp.Privileges[0].Luid=luid;
tp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;
/* Adjust Token Privileges */
if (!AdjustTokenPrivileges(hToken, FALSE, &tp, sizeof(TOKEN_PRIVILEGES), &oldtp, &dwSize)) {
CloseHandle(hToken);
return false;
}
// close handles
CloseHandle(hToken);
return true;
}
uj5u.com熱心網友回復:
拿其它行程做實驗,比如記事本,計算器,IE,看是否還是這個錯誤。右鍵管理員權限運行,看是否還是這個錯誤。
進行以上對照實驗以確定是不是權限問題。
一般權限問題GetLastError為5
uj5u.com熱心網友回復:
你的程式是否是32位, 目標行程是否是64位, 如果是這樣, 錯誤很正常轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/103867.html
標籤:硬件/系統
