23 #define VALUE_BUFFER_SIZE (sizeof(KEY_VALUE_PARTIAL_INFORMATION) + 512) 48 *PrivilegeState =
NULL;
72 State->NewPrivileges->PrivilegeCount = 1;
88 if (!
State->OldPrivileges)
100 State->OldPrivileges,
109 *PrivilegeState =
State;
136 State->OldPrivileges,
166 InputLength =
Input->Length;
174 while (
Length < InputLength)
176 if (*
p >
L' ')
break;
192 while (
Length < InputLength)
194 if (*pp <=
L' ')
break;
201 while (
Length < InputLength)
203 if (*pp >
L' ')
break;
259 sizeof(
L"\\system32;");
260 RtlInitEmptyUnicodeString(&FullPathString,
263 if (FullPathString.
Buffer)
275 CmdLineCopy = *CommandLine;
312 RtlInitEmptyUnicodeString(&PathString,
333 RtlInitEmptyUnicodeString(&PathString,
351 DPRINT1(
"SMSS: %wZ environment variable not defined.\n", &EnvString);
395 DPRINT1(
"SMSS: Unable to translate %ws into an NT File Name\n",
405 if (FilePart <= PathBuffer)
436 L"\\Registry\\Machine\\System\\CurrentControlSet\\Control");
445 DPRINT1(
"SMSS: Cannot open control key (Status 0x%x)\n",
Status);
462 DPRINT1(
"SMSS: Cannot query value key (Type %lu, Status 0x%x)\n",
486 PVOID BootStatusDataHandle;
490 *ShutdownOkay =
FALSE;
552 sizeof(ShutdownOkay),
NTSTRSAFEAPI RtlStringCbCopyW(_Out_writes_bytes_(cbDest) _Always_(_Post_z_) NTSTRSAFE_PWSTR pszDest, _In_ size_t cbDest, _In_ NTSTRSAFE_PCWSTR pszSrc)
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
#define STATUS_NOT_ALL_ASSIGNED
#define STATUS_PRIVILEGE_NOT_HELD
NTSTATUS NTAPI RtlLockBootStatusData(_Out_ PHANDLE FileHandle)
#define STATUS_INSUFFICIENT_RESOURCES
_In_ ULONG _In_ ULONG _In_ ULONG Length
VOID NTAPI SmpRestoreBootStatusData(IN BOOLEAN BootOkay, IN BOOLEAN ShutdownOkay)
#define OBJ_CASE_INSENSITIVE
UNICODE_STRING SmpDebugKeyword
_Must_inspect_result_ _Out_ PNDIS_STATUS _In_ NDIS_HANDLE _In_ ULONG _Out_ PNDIS_STRING _Out_ PNDIS_HANDLE KeyHandle
UNICODE_STRING SmpDefaultLibPath
_CONST_RETURN wchar_t *__cdecl wcsstr(_In_z_ const wchar_t *_Str, _In_z_ const wchar_t *_SubStr)
NTSTATUS NTAPI SmpParseCommandLine(IN PUNICODE_STRING CommandLine, OUT PULONG Flags, OUT PUNICODE_STRING FileName, OUT PUNICODE_STRING Directory, OUT PUNICODE_STRING Arguments)
BOOLEAN NTAPI RtlFreeHeap(IN PVOID HeapHandle, IN ULONG Flags, IN PVOID HeapBase)
_IRQL_requires_same_ _In_ PLSA_STRING _In_ SECURITY_LOGON_TYPE _In_ ULONG _In_ ULONG _In_opt_ PTOKEN_GROUPS _In_ PTOKEN_SOURCE _Out_ PVOID _Out_ PULONG _Inout_ PLUID _Out_ PHANDLE Token
_In_ ULONG _In_ ULONG State
IN PVOID IN PVOID IN USHORT IN USHORT Size
NTSTATUS NTAPI NtOpenProcessToken(IN HANDLE ProcessHandle, IN ACCESS_MASK DesiredAccess, OUT PHANDLE TokenHandle)
NTSTATUS NTAPI RtlUnlockBootStatusData(_In_ HANDLE FileHandle)
#define VALUE_BUFFER_SIZE
PTOKEN_PRIVILEGES OldPrivileges
#define STATUS_BUFFER_TOO_SMALL
#define SE_PRIVILEGE_ENABLED
NTSYSAPI ULONG NTAPI RtlDosSearchPath_U(_In_ PCWSTR Path, _In_ PCWSTR FileName, _In_ PCWSTR Extension, _In_ ULONG BufferSize, _Out_ PWSTR Buffer, _Out_ PWSTR *PartName)
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
PWCHAR SmpDefaultEnvironment
NTSTATUS NTAPI SmpAcquirePrivilege(IN ULONG Privilege, OUT PVOID *PrivilegeState)
NTSTATUS NTAPI SmpParseToken(IN PUNICODE_STRING Input, IN BOOLEAN SecondPass, OUT PUNICODE_STRING Token)
NTSYSAPI NTSTATUS NTAPI RtlQueryEnvironmentVariable_U(_In_opt_ PWSTR Environment, _In_ PCUNICODE_STRING Name, _Out_ PUNICODE_STRING Value)
_Must_inspect_result_ _In_ WDFDEVICE _In_ PCUNICODE_STRING KeyName
#define NtCurrentProcess()
PVOID NTAPI RtlAllocateHeap(IN PVOID HeapHandle, IN ULONG Flags, IN SIZE_T Size)
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING _Out_opt_ PUSHORT _Inout_opt_ PUNICODE_STRING Value
UNICODE_STRING SmpASyncKeyword
BOOLEAN NTAPI SmpQueryRegistrySosOption(VOID)
NTSTATUS RtlAppendUnicodeToString(IN PUNICODE_STRING Str1, IN PWSTR Str2)
NTSYSAPI NTSTATUS NTAPI NtQueryValueKey(IN HANDLE KeyHandle, IN PUNICODE_STRING ValueName, IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass, IN PVOID KeyValueInformation, IN ULONG Length, IN PULONG ResultLength)
_Must_inspect_result_ _In_ ULONG Flags
#define NT_SUCCESS(StatCode)
UNICODE_STRING SmpSystemRoot
FORCEINLINE LUID NTAPI_INLINE RtlConvertUlongToLuid(_In_ ULONG Val)
BOOL Privilege(LPTSTR pszPrivilege, BOOL bEnable)
NTSTATUS NTAPI NtClose(IN HANDLE Handle)
VOID NTAPI SmpReleasePrivilege(IN PVOID PrivState)
UNICODE_STRING SmpAutoChkKeyword
#define STATUS_UNSUCCESSFUL
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING ValueName
struct _TOKEN_PRIVILEGES * PTOKEN_PRIVILEGES
NTSYSAPI BOOLEAN NTAPI RtlCreateUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
_Must_inspect_result_ __kernel_entry NTSTATUS NTAPI NtAdjustPrivilegesToken(_In_ HANDLE TokenHandle, _In_ BOOLEAN DisableAllPrivileges, _In_opt_ PTOKEN_PRIVILEGES NewState, _In_ ULONG BufferLength, _Out_writes_bytes_to_opt_(BufferLength, *ReturnLength) PTOKEN_PRIVILEGES PreviousState, _When_(PreviousState!=NULL, _Out_) PULONG ReturnLength)
Removes a certain amount of privileges of a token based upon the request by the caller.
PTOKEN_PRIVILEGES NewPrivileges
#define STATUS_OBJECT_NAME_NOT_FOUND
int TokenLength(const char *pc)
struct _SMP_PRIVILEGE_STATE SMP_PRIVILEGE_STATE
NTSYSAPI NTSTATUS NTAPI RtlAppendUnicodeStringToString(PUNICODE_STRING Destination, PUNICODE_STRING Source)
BOOLEAN NTAPI SmpSaveAndClearBootStatusData(OUT PBOOLEAN BootOkay, OUT PBOOLEAN ShutdownOkay)
TOKEN_PRIVILEGES NewBuffer
#define STATUS_OBJECT_PATH_INVALID
struct _SMP_PRIVILEGE_STATE * PSMP_PRIVILEGE_STATE
NTSYSAPI NTSTATUS NTAPI NtOpenKey(OUT PHANDLE KeyHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes)
NTSTATUS NTAPI RtlGetSetBootStatusData(_In_ HANDLE FileHandle, _In_ BOOLEAN Read, _In_ RTL_BSD_ITEM_TYPE DataClass, _In_ PVOID Buffer, _In_ ULONG BufferSize, _Out_opt_ PULONG ReturnLength)
base for all directory entries
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
#define InitializeObjectAttributes(p, n, a, r, s)
#define RtlCopyMemory(Destination, Source, Length)
#define TOKEN_ADJUST_PRIVILEGES
NTSYSAPI BOOLEAN NTAPI RtlEqualUnicodeString(PUNICODE_STRING String1, PUNICODE_STRING String2, BOOLEAN CaseInSensitive)
NTSYSAPI BOOLEAN NTAPI RtlDosPathNameToNtPathName_U(_In_opt_z_ PCWSTR DosPathName, _Out_ PUNICODE_STRING NtPathName, _Out_opt_ PCWSTR *NtFileNamePart, _Out_opt_ PRTL_RELATIVE_NAME_U DirectoryInfo)