windows-nt/Source/XPSP1/NT/windows/appcompat/shims/specific/koeisecuritycheck.cpp
2020-09-26 16:20:57 +08:00

95 lines
2 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*++
Copyright (c) 2000 Microsoft Corporation
Module Name:
KOEISecurityCheck.cpp
Abstract:
This shim sets the SID for TokenOwner at the beginning of the setup.exe. It checks
if the administrator group SID is enabled in current process token. If it is enabled then
we set the TokenOwner SID to administrator group SID. If its not then it does nothing.
History:
04/17/2001 zhongyl create
--*/
#include "precomp.h"
IMPLEMENT_SHIM_BEGIN(KOEISecurityCheck)
#include "ShimHookMacro.h"
APIHOOK_ENUM_BEGIN
APIHOOK_ENUM_END
/*++
DisableStickyKeys saves the current value for LPSTICKYKEYS and then disables the option.
--*/
VOID
SetSidForOwner()
{
BYTE sidBuffer[50];
PSID pSID = (PSID)&sidBuffer;
SID_IDENTIFIER_AUTHORITY SIDAuth = SECURITY_NT_AUTHORITY;
BOOL IsMember;
HANDLE hToken;
TOKEN_OWNER SIDforOwner;
// Open a handle to the access token for the calling process.
if (!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY | TOKEN_ADJUST_DEFAULT, &hToken ))
return; //if OpenProcessToken fails, do nothing
// Create a SID for the BUILTIN\Administrators group.
if (!AllocateAndInitializeSid(&SIDAuth, 2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, &pSID))
return; //if AllocateAndInitializedSid fails, do nothing
// Check if the administrator group SID is enabled in current process token
if (!CheckTokenMembership(NULL, pSID, &IsMember))
return; //if CheckTokenMembership fails, do nothing
SIDforOwner.Owner = pSID;
// if the administrator group SID is enabled in current process token, call SetTokenInformation to set the SID for Owner.
if (IsMember)
SetTokenInformation(hToken, TokenOwner, &SIDforOwner, sizeof(SIDforOwner));
return;
}
BOOL
NOTIFY_FUNCTION(
DWORD fdwReason
)
{
if (fdwReason == SHIM_STATIC_DLLS_INITIALIZED) {
SetSidForOwner();
}
return TRUE;
}
/*++
Register hooked functions
--*/
HOOK_BEGIN
CALL_NOTIFY_FUNCTION
HOOK_END
IMPLEMENT_SHIM_END