diff --git a/dlls/kernel32/kernel32.spec b/dlls/kernel32/kernel32.spec index 89c2511c3cf..ecfc40288f0 100644 --- a/dlls/kernel32/kernel32.spec +++ b/dlls/kernel32/kernel32.spec @@ -1448,6 +1448,7 @@ @ stdcall -import SetProcessAffinityUpdateMode(long long) @ stdcall -import SetProcessDefaultCpuSets(ptr ptr long) @ stdcall SetProcessDEPPolicy(long) +@ stdcall -import SetProcessInformation(long long ptr long) @ stdcall -import SetProcessMitigationPolicy(long ptr long) @ stdcall -import SetProcessPreferredUILanguages(long ptr ptr) @ stdcall -import SetProcessPriorityBoost(long long) diff --git a/dlls/kernelbase/kernelbase.spec b/dlls/kernelbase/kernelbase.spec index c51dbd6bc73..d679e190caa 100644 --- a/dlls/kernelbase/kernelbase.spec +++ b/dlls/kernelbase/kernelbase.spec @@ -1494,7 +1494,7 @@ @ stdcall SetProcessAffinityUpdateMode(long long) @ stdcall SetProcessDefaultCpuSets(ptr ptr long) @ stdcall SetProcessGroupAffinity(long ptr ptr) -# @ stub SetProcessInformation +@ stdcall SetProcessInformation(long long ptr long) @ stdcall SetProcessMitigationPolicy(long ptr long) @ stdcall SetProcessPreferredUILanguages(long ptr ptr) @ stdcall SetProcessPriorityBoost(long long) diff --git a/dlls/kernelbase/process.c b/dlls/kernelbase/process.c index 32f622bdf3e..39de15066d4 100644 --- a/dlls/kernelbase/process.c +++ b/dlls/kernelbase/process.c @@ -691,6 +691,26 @@ BOOL WINAPI DECLSPEC_HOTPATCH CreateProcessW( const WCHAR *app_name, WCHAR *cmd_ } +/********************************************************************** + * SetProcessInformation (kernelbase.@) + */ +BOOL WINAPI SetProcessInformation( HANDLE process, PROCESS_INFORMATION_CLASS info_class, void *info, DWORD size ) +{ + switch (info_class) + { + case ProcessMemoryPriority: + return set_ntstatus( NtSetInformationProcess( process, ProcessPagePriority, info, size )); + case ProcessPowerThrottling: + return set_ntstatus( NtSetInformationProcess( process, ProcessPowerThrottlingState, info, size )); + case ProcessLeapSecondInfo: + return set_ntstatus( NtSetInformationProcess( process, ProcessLeapSecondInformation, info, size )); + default: + FIXME("Unrecognized information class %d.\n", info_class); + return FALSE; + } +} + + /********************************************************************* * DuplicateHandle (kernelbase.@) */ diff --git a/dlls/wow64/process.c b/dlls/wow64/process.c index 46bd6bfec36..ea7a1beb5e3 100644 --- a/dlls/wow64/process.c +++ b/dlls/wow64/process.c @@ -1078,6 +1078,9 @@ NTSTATUS WINAPI wow64_NtSetInformationProcess( UINT *args ) case ProcessDefaultHardErrorMode: /* ULONG */ case ProcessPriorityClass: /* PROCESS_PRIORITY_CLASS */ case ProcessExecuteFlags: /* ULONG */ + case ProcessPagePriority: /* MEMORY_PRIORITY_INFORMATION */ + case ProcessPowerThrottlingState: /* PROCESS_POWER_THROTTLING_STATE */ + case ProcessLeapSecondInformation: /* PROCESS_LEAP_SECOND_INFO */ return NtSetInformationProcess( handle, class, ptr, len ); case ProcessAffinityMask: /* ULONG_PTR */ diff --git a/include/ddk/wdm.h b/include/ddk/wdm.h index bd6ddbd67c5..321b07b84fa 100644 --- a/include/ddk/wdm.h +++ b/include/ddk/wdm.h @@ -1943,7 +1943,7 @@ NTSTATUS WINAPI ZwSetEvent(HANDLE,PULONG); NTSTATUS WINAPI ZwSetInformationFile(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG,FILE_INFORMATION_CLASS); NTSTATUS WINAPI ZwSetInformationKey(HANDLE,const int,PVOID,ULONG); NTSTATUS WINAPI ZwSetInformationObject(HANDLE, OBJECT_INFORMATION_CLASS, PVOID, ULONG); -NTSTATUS WINAPI ZwSetInformationProcess(HANDLE,PROCESS_INFORMATION_CLASS,PVOID,ULONG); +NTSTATUS WINAPI ZwSetInformationProcess(HANDLE,PROCESSINFOCLASS,PVOID,ULONG); NTSTATUS WINAPI ZwSetInformationThread(HANDLE,THREADINFOCLASS,LPCVOID,ULONG); NTSTATUS WINAPI ZwSetIoCompletion(HANDLE,ULONG,ULONG,NTSTATUS,ULONG); NTSTATUS WINAPI ZwSetLdtEntries(ULONG,ULONG,ULONG,ULONG,ULONG,ULONG); diff --git a/include/winbase.h b/include/winbase.h index 7ad56502566..7d7be1ae2a8 100644 --- a/include/winbase.h +++ b/include/winbase.h @@ -1771,6 +1771,21 @@ typedef struct _WIN32_MEMORY_RANGE_ENTRY SIZE_T NumberOfBytes; } WIN32_MEMORY_RANGE_ENTRY, *PWIN32_MEMORY_RANGE_ENTRY; +typedef enum _PROCESS_INFORMATION_CLASS +{ + ProcessMemoryPriority, + ProcessMemoryExhaustionInfo, + ProcessAppMemoryInfo, + ProcessInPrivateInfo, + ProcessPowerThrottling, + ProcessReservedValue1, + ProcessTelemetryCoverageInfo, + ProcessProtectionLevelInfo, + ProcessLeapSecondInfo, + ProcessMachineTypeInfo, + ProcessInformationClassMax +} PROCESS_INFORMATION_CLASS; + WINBASEAPI BOOL WINAPI ActivateActCtx(HANDLE,ULONG_PTR *); WINADVAPI BOOL WINAPI AddAccessAllowedAce(PACL,DWORD,DWORD,PSID); WINADVAPI BOOL WINAPI AddAccessAllowedAceEx(PACL,DWORD,DWORD,DWORD,PSID); @@ -2689,6 +2704,7 @@ WINBASEAPI BOOL WINAPI SetPriorityClass(HANDLE,DWORD); WINADVAPI BOOL WINAPI SetPrivateObjectSecurity(SECURITY_INFORMATION,PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR*,PGENERIC_MAPPING,HANDLE); WINADVAPI BOOL WINAPI SetPrivateObjectSecurityEx(SECURITY_INFORMATION,PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR*,ULONG,PGENERIC_MAPPING,HANDLE); WINBASEAPI BOOL WINAPI SetProcessAffinityMask(HANDLE,DWORD_PTR); +WINBASEAPI BOOL WINAPI SetProcessInformation(HANDLE,PROCESS_INFORMATION_CLASS,LPVOID,DWORD); WINBASEAPI BOOL WINAPI SetProcessPriorityBoost(HANDLE,BOOL); WINBASEAPI BOOL WINAPI SetProcessShutdownParameters(DWORD,DWORD); WINBASEAPI BOOL WINAPI SetProcessWorkingSetSize(HANDLE,SIZE_T,SIZE_T); diff --git a/include/winternl.h b/include/winternl.h index 3a62ff0b268..5a99827fe65 100644 --- a/include/winternl.h +++ b/include/winternl.h @@ -1574,12 +1574,14 @@ typedef enum _PROCESSINFOCLASS { ProcessConsoleHostProcess = 49, ProcessWindowInformation = 50, ProcessHandleInformation = 51, + ProcessPowerThrottlingState = 77, + ProcessLeapSecondInformation = 97, MaxProcessInfoClass, #ifdef __WINESRC__ ProcessWineMakeProcessSystem = 1000, ProcessWineLdtCopy, #endif -} PROCESSINFOCLASS, PROCESS_INFORMATION_CLASS; +} PROCESSINFOCLASS; #define MEM_EXECUTE_OPTION_DISABLE 0x01 #define MEM_EXECUTE_OPTION_ENABLE 0x02 @@ -4174,7 +4176,7 @@ NTSYSAPI NTSTATUS WINAPI NtSetInformationFile(HANDLE,PIO_STATUS_BLOCK,PVOID,ULO NTSYSAPI NTSTATUS WINAPI NtSetInformationJobObject(HANDLE,JOBOBJECTINFOCLASS,PVOID,ULONG); NTSYSAPI NTSTATUS WINAPI NtSetInformationKey(HANDLE,const int,PVOID,ULONG); NTSYSAPI NTSTATUS WINAPI NtSetInformationObject(HANDLE, OBJECT_INFORMATION_CLASS, PVOID, ULONG); -NTSYSAPI NTSTATUS WINAPI NtSetInformationProcess(HANDLE,PROCESS_INFORMATION_CLASS,PVOID,ULONG); +NTSYSAPI NTSTATUS WINAPI NtSetInformationProcess(HANDLE,PROCESSINFOCLASS,PVOID,ULONG); NTSYSAPI NTSTATUS WINAPI NtSetInformationThread(HANDLE,THREADINFOCLASS,LPCVOID,ULONG); NTSYSAPI NTSTATUS WINAPI NtSetInformationToken(HANDLE,TOKEN_INFORMATION_CLASS,PVOID,ULONG); NTSYSAPI NTSTATUS WINAPI NtSetInformationVirtualMemory(HANDLE,VIRTUAL_MEMORY_INFORMATION_CLASS,ULONG_PTR,PMEMORY_RANGE_ENTRY,PVOID,ULONG);