|
远程线程注入版获取SYSTEM权限(10) { char *errMsg; FormatMessage ( FORMAT_MESSAGE_ALLOCATE_BUFFER FORMAT_MESSAGE_FROM_SYSTEM, NULL, RtlNtStatusToDosError( status ), MAKELANGID( LANG_NEUTRAL, SUBLANG_DEFAULT ), ( LPTSTR )&errMsg, 0, NULL ); fprintf( stderr, "%s: %s", message, errMsg ); LocalFree( errMsg ); return; } /* end of PrintZwErrorCUI */ static BOOL SetCurrentProcessPrivilege ( LPCTSTR PrivilegeName, BOOL EnableFlag ) { HANDLE TokenHandle = ( HANDLE )-1; BOOL ret = TRUE; if ( FALSE == OpenProcessToken( GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &TokenHandle ) ) { PrintWin32ErrorCUI( "OpenProcessToken() failed", GetLastError() ); ret = FALSE; goto SetCurrentProcessPrivilege_exit; } ret = SetPrivilege( TokenHandle, PrivilegeName, EnableFlag ); SetCurrentProcessPrivilege_exit: if ( TokenHandle != ( HANDLE )-1 ) { CloseHandle( TokenHandle ); TokenHandle = ( HANDLE )-1; } return( ret ); } /* end of SetCurrentProcessPrivilege */ static BOOL SetPrivilege ( HANDLE TokenHandle, LPCTSTR PrivilegeName, BOOL EnableFlag ) { DWORD error; BOOL ret = FALSE; TOKEN_PRIVILEGES tp = { 1, { { { 0, 0 }, 0 } } }; if ( TRUE == EnableFlag ) { tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; } if ( FALSE == LookupPrivilegeValue( NULL, PrivilegeName, &tp.Privileges[0].Luid ) )
|