33,311
社区成员
发帖
与我相关
我的任务
分享
private void btnStart_Click(object sender, EventArgs e)
{
if (_processId == 0 || _fileNameOfDll == null) return;
bool bTemp;
//一:1
IntPtr phToken = IntPtr.Zero;
bTemp = Function.OpenProcessToken(Process.GetCurrentProcess().Handle, DesiredAccessRights.TOKEN_ADJUST_PRIVILEGES | DesiredAccessRights.TOKEN_QUERY, ref phToken);
//2
TokenPrivilegeLuid token;
token.PrivilegesLuid = 0;
token.PrivilegesCount = 1;
token.PrivilegesAttributes = PrivilegesAttributes.SE_PRIVILEGE_ENABLED;
bTemp = Function.LookupPrivilegeValue(null, WinNtPrivilegeName.SE_DEBUG_NAME, ref token.PrivilegesLuid);
//3
bTemp = Function.AdjustTokenPrivileges(phToken, false, ref token, 0, IntPtr.Zero, IntPtr.Zero);
//二
IntPtr hProcess = Function.OpenProcess(ProcessAccessRights.PROCESS_VM_OPERATION, false, _processId);
//三
IntPtr allocBaseAddress = Function.VirualAllocEx(hProcess, IntPtr.Zero, _fileNameOfDll.Length + 1,
AllocationType.MEM_COMMIT | AllocationType.MEM_RESERVE, ProtectionType.PAGE_EXECUTE_READWRITE);
}
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;
}
[DllImport("kernel32")]
public static extern int GetLastError();
//二
IntPtr hProcess = Function.OpenProcess(ProcessAccessRights.PROCESS_VM_OPERATION, false, _processId);
int result = Function.GetLastError();