diff --git a/dlls/kernel32/cpu.c b/dlls/kernel32/cpu.c index b3604633c83..6dff865ccf5 100644 --- a/dlls/kernel32/cpu.c +++ b/dlls/kernel32/cpu.c @@ -149,16 +149,6 @@ VOID WINAPI GetNativeSystemInfo( } } -/*********************************************************************** - * IsProcessorFeaturePresent [KERNEL32.@] - * - * Determine if the cpu supports a given feature. - */ -BOOL WINAPI IsProcessorFeaturePresent ( DWORD feature ) -{ - return RtlIsProcessorFeaturePresent( feature ); -} - /*********************************************************************** * K32GetPerformanceInfo (KERNEL32.@) */ diff --git a/dlls/kernel32/kernel32.spec b/dlls/kernel32/kernel32.spec index 9b07e8917c3..f522429b767 100644 --- a/dlls/kernel32/kernel32.spec +++ b/dlls/kernel32/kernel32.spec @@ -306,7 +306,7 @@ @ stdcall CreateNamedPipeA(str long long long long long long ptr) @ stdcall -import CreateNamedPipeW(wstr long long long long long long ptr) # @ stub CreateNlsSecurityDescriptor -@ stdcall CreatePipe(ptr ptr ptr long) +@ stdcall -import CreatePipe(ptr ptr ptr long) # @ stub CreatePrivateNamespaceA # @ stub CreatePrivateNamespaceW @ stdcall CreateProcessA(str str ptr ptr long long ptr str ptr ptr) @@ -795,7 +795,7 @@ @ stdcall GetProcessVersion(long) @ stdcall GetProcessWorkingSetSize(long ptr ptr) @ stdcall -import GetProcessWorkingSetSizeEx(long ptr ptr ptr) -@ stdcall GetProductInfo(long long long long ptr) +@ stdcall -import GetProductInfo(long long long long ptr) @ stub GetProductName @ stdcall GetProfileIntA(str str long) @ stdcall GetProfileIntW(wstr wstr long) @@ -981,8 +981,8 @@ @ stub -i386 IsLSCallback # @ stub IsNLSDefinedString @ stdcall IsNormalizedString(long wstr long) -@ stdcall IsProcessInJob(long long ptr) -@ stdcall IsProcessorFeaturePresent(long) +@ stdcall -import IsProcessInJob(long long ptr) +@ stdcall -import IsProcessorFeaturePresent(long) @ stub -i386 IsSLCallback @ stdcall IsSystemResumeAutomatic() @ stdcall -import IsThreadAFiber() diff --git a/dlls/kernel32/sync.c b/dlls/kernel32/sync.c index 054b8c205a4..48f9fca20a6 100644 --- a/dlls/kernel32/sync.c +++ b/dlls/kernel32/sync.c @@ -382,26 +382,6 @@ BOOL WINAPI AssignProcessToJobObject( HANDLE job, HANDLE process ) return !status; } -/****************************************************************************** - * IsProcessInJob (KERNEL32.@) - */ -BOOL WINAPI IsProcessInJob( HANDLE process, HANDLE job, PBOOL result ) -{ - NTSTATUS status = NtIsProcessInJob( process, job ); - switch(status) - { - case STATUS_PROCESS_IN_JOB: - *result = TRUE; - return TRUE; - case STATUS_PROCESS_NOT_IN_JOB: - *result = FALSE; - return TRUE; - default: - SetLastError( RtlNtStatusToDosError(status) ); - return FALSE; - } -} - /* * Timers @@ -739,75 +719,6 @@ BOOL WINAPI CallNamedPipeA( return ret; } -/****************************************************************** - * CreatePipe (KERNEL32.@) - * - */ -BOOL WINAPI CreatePipe( PHANDLE hReadPipe, PHANDLE hWritePipe, - LPSECURITY_ATTRIBUTES sa, DWORD size ) -{ - static unsigned index /* = 0 */; - WCHAR name[64]; - HANDLE hr, hw; - unsigned in_index = index; - UNICODE_STRING nt_name; - OBJECT_ATTRIBUTES attr; - NTSTATUS status; - IO_STATUS_BLOCK iosb; - LARGE_INTEGER timeout; - - *hReadPipe = *hWritePipe = INVALID_HANDLE_VALUE; - - attr.Length = sizeof(attr); - attr.RootDirectory = 0; - attr.ObjectName = &nt_name; - attr.Attributes = OBJ_CASE_INSENSITIVE | - ((sa && sa->bInheritHandle) ? OBJ_INHERIT : 0); - attr.SecurityDescriptor = sa ? sa->lpSecurityDescriptor : NULL; - attr.SecurityQualityOfService = NULL; - - if (!size) size = 4096; - - timeout.QuadPart = (ULONGLONG)NMPWAIT_USE_DEFAULT_WAIT * -10000; - /* generate a unique pipe name (system wide) */ - do - { - static const WCHAR nameFmt[] = { '\\','?','?','\\','p','i','p','e', - '\\','W','i','n','3','2','.','P','i','p','e','s','.','%','0','8','l', - 'u','.','%','0','8','u','\0' }; - - snprintfW(name, ARRAY_SIZE(name), nameFmt, GetCurrentProcessId(), ++index); - RtlInitUnicodeString(&nt_name, name); - status = NtCreateNamedPipeFile(&hr, GENERIC_READ | FILE_WRITE_ATTRIBUTES | SYNCHRONIZE, - &attr, &iosb, FILE_SHARE_WRITE, FILE_OVERWRITE_IF, - FILE_SYNCHRONOUS_IO_NONALERT, - FALSE, FALSE, FALSE, - 1, size, size, &timeout); - if (status) - { - SetLastError( RtlNtStatusToDosError(status) ); - hr = INVALID_HANDLE_VALUE; - } - } while (hr == INVALID_HANDLE_VALUE && index != in_index); - /* from completion sakeness, I think system resources might be exhausted before this happens !! */ - if (hr == INVALID_HANDLE_VALUE) return FALSE; - - status = NtOpenFile(&hw, GENERIC_WRITE | FILE_READ_ATTRIBUTES | SYNCHRONIZE, &attr, &iosb, 0, - FILE_SYNCHRONOUS_IO_NONALERT | FILE_NON_DIRECTORY_FILE); - - if (status) - { - SetLastError( RtlNtStatusToDosError(status) ); - NtClose(hr); - return FALSE; - } - - *hReadPipe = hr; - *hWritePipe = hw; - return TRUE; -} - - /****************************************************************************** * CreateMailslotA [KERNEL32.@] * diff --git a/dlls/kernel32/version.c b/dlls/kernel32/version.c index e68da5bb163..5f33847d608 100644 --- a/dlls/kernel32/version.c +++ b/dlls/kernel32/version.c @@ -110,21 +110,6 @@ DWORD WINAPI SetTermsrvAppInstallMode(BOOL bInstallMode) return 0; } -/*********************************************************************** - * GetProductInfo (KERNEL32.@) - * - * Gives info about the current Windows product type, in a format compatible - * with the given Windows version - * - * Returns TRUE if the input is valid, FALSE otherwise - */ -BOOL WINAPI GetProductInfo(DWORD dwOSMajorVersion, DWORD dwOSMinorVersion, DWORD dwSpMajorVersion, - DWORD dwSpMinorVersion, PDWORD pdwReturnedProductType) -{ - return RtlGetProductInfo(dwOSMajorVersion, dwOSMinorVersion, - dwSpMajorVersion, dwSpMinorVersion, pdwReturnedProductType); -} - /*********************************************************************** * GetCurrentPackageId (KERNEL32.@) */ diff --git a/dlls/kernelbase/kernelbase.spec b/dlls/kernelbase/kernelbase.spec index d4c878fb45e..b582b3d092e 100644 --- a/dlls/kernelbase/kernelbase.spec +++ b/dlls/kernelbase/kernelbase.spec @@ -200,7 +200,7 @@ @ stdcall CreateMutexExW(ptr wstr long long) @ stdcall CreateMutexW(ptr long wstr) @ stdcall CreateNamedPipeW(wstr long long long long long long ptr) -@ stdcall CreatePipe(ptr ptr ptr long) kernel32.CreatePipe +@ stdcall CreatePipe(ptr ptr ptr long) # @ stub CreatePrivateNamespaceW @ stdcall CreatePrivateObjectSecurity(ptr ptr ptr long long ptr) @ stdcall CreatePrivateObjectSecurityEx(ptr ptr ptr ptr long long long ptr) @@ -639,7 +639,7 @@ @ stdcall GetProcessVersion(long) kernel32.GetProcessVersion @ stdcall GetProcessWorkingSetSizeEx(long ptr ptr ptr) # @ stub GetProcessorSystemCycleTime -@ stdcall GetProductInfo(long long long long ptr) kernel32.GetProductInfo +@ stdcall GetProductInfo(long long long long ptr) @ stub GetPtrCalData @ stub GetPtrCalDataArray # @ stub GetPublisherCacheFolder @@ -864,8 +864,8 @@ @ stub IsNLSDefinedString @ stdcall IsNormalizedString(long wstr long) kernel32.IsNormalizedString # @ stub IsProcessCritical -@ stdcall IsProcessInJob(long long ptr) kernel32.IsProcessInJob -@ stdcall IsProcessorFeaturePresent(long) kernel32.IsProcessorFeaturePresent +@ stdcall IsProcessInJob(long long ptr) +@ stdcall IsProcessorFeaturePresent(long) # @ stub IsSideloadingEnabled # @ stub IsSideloadingPolicyApplied # @ stub IsSyncForegroundPolicyRefresh diff --git a/dlls/kernelbase/process.c b/dlls/kernelbase/process.c index 23480f6823a..11d515d4fb6 100644 --- a/dlls/kernelbase/process.c +++ b/dlls/kernelbase/process.c @@ -259,6 +259,36 @@ BOOL WINAPI DECLSPEC_HOTPATCH GetProcessWorkingSetSizeEx( HANDLE process, SIZE_T } +/****************************************************************************** + * IsProcessInJob (kernelbase.@) + */ +BOOL WINAPI DECLSPEC_HOTPATCH IsProcessInJob( HANDLE process, HANDLE job, BOOL *result ) +{ + NTSTATUS status = NtIsProcessInJob( process, job ); + + switch (status) + { + case STATUS_PROCESS_IN_JOB: + *result = TRUE; + return TRUE; + case STATUS_PROCESS_NOT_IN_JOB: + *result = FALSE; + return TRUE; + default: + return set_ntstatus( status ); + } +} + + +/*********************************************************************** + * IsProcessorFeaturePresent (kernelbase.@) + */ +BOOL WINAPI DECLSPEC_HOTPATCH IsProcessorFeaturePresent ( DWORD feature ) +{ + return RtlIsProcessorFeaturePresent( feature ); +} + + /********************************************************************** * IsWow64Process (kernelbase.@) */ diff --git a/dlls/kernelbase/sync.c b/dlls/kernelbase/sync.c index 51763c1abc6..91e37b8350e 100644 --- a/dlls/kernelbase/sync.c +++ b/dlls/kernelbase/sync.c @@ -1172,6 +1172,56 @@ HANDLE WINAPI DECLSPEC_HOTPATCH CreateNamedPipeW( LPCWSTR name, DWORD open_mode, } +/****************************************************************** + * CreatePipe (kernelbase.@) + */ +BOOL WINAPI DECLSPEC_HOTPATCH CreatePipe( HANDLE *read_pipe, HANDLE *write_pipe, + SECURITY_ATTRIBUTES *sa, DWORD size ) +{ + static unsigned int index; + WCHAR name[64]; + UNICODE_STRING nt_name; + OBJECT_ATTRIBUTES attr; + IO_STATUS_BLOCK iosb; + LARGE_INTEGER timeout; + + *read_pipe = *write_pipe = INVALID_HANDLE_VALUE; + + attr.Length = sizeof(attr); + attr.RootDirectory = 0; + attr.ObjectName = &nt_name; + attr.Attributes = OBJ_CASE_INSENSITIVE | ((sa && sa->bInheritHandle) ? OBJ_INHERIT : 0); + attr.SecurityDescriptor = sa ? sa->lpSecurityDescriptor : NULL; + attr.SecurityQualityOfService = NULL; + + if (!size) size = 4096; + + timeout.QuadPart = (ULONGLONG)NMPWAIT_USE_DEFAULT_WAIT * -10000; + + /* generate a unique pipe name (system wide) */ + for (;;) + { + static const WCHAR fmtW[] = { '\\','?','?','\\','p','i','p','e','\\', + 'W','i','n','3','2','.','P','i','p','e','s','.','%','0','8','l','u','.','%','0','8','u','\0' }; + + swprintf( name, ARRAY_SIZE(name), fmtW, GetCurrentProcessId(), ++index ); + RtlInitUnicodeString( &nt_name, name ); + if (!NtCreateNamedPipeFile( read_pipe, GENERIC_READ | FILE_WRITE_ATTRIBUTES | SYNCHRONIZE, + &attr, &iosb, FILE_SHARE_WRITE, FILE_OVERWRITE_IF, + FILE_SYNCHRONOUS_IO_NONALERT, + FALSE, FALSE, FALSE, 1, size, size, &timeout )) + break; + } + if (!set_ntstatus( NtOpenFile( write_pipe, GENERIC_WRITE | FILE_READ_ATTRIBUTES | SYNCHRONIZE, &attr, + &iosb, 0, FILE_SYNCHRONOUS_IO_NONALERT | FILE_NON_DIRECTORY_FILE ))) + { + NtClose( *read_pipe ); + return FALSE; + } + return TRUE; +} + + /*********************************************************************** * DisconnectNamedPipe (kernelbase.@) */ diff --git a/dlls/kernelbase/version.c b/dlls/kernelbase/version.c index df96dab26f4..b09004075aa 100644 --- a/dlls/kernelbase/version.c +++ b/dlls/kernelbase/version.c @@ -1339,6 +1339,16 @@ DWORD WINAPI VerFindFileW( DWORD flags, LPCWSTR filename, LPCWSTR win_dir, LPCWS } +/*********************************************************************** + * GetProductInfo (kernelbase.@) + */ +BOOL WINAPI DECLSPEC_HOTPATCH GetProductInfo( DWORD os_major, DWORD os_minor, + DWORD sp_major, DWORD sp_minor, DWORD *type ) +{ + return RtlGetProductInfo( os_major, os_minor, sp_major, sp_minor, type ); +} + + /*********************************************************************** * GetVersion (kernelbase.@) */