Changeset 96475 in vbox for trunk/src/VBox/Runtime/r3/win
- Timestamp:
- Aug 25, 2022 2:27:54 AM (2 years ago)
- Location:
- trunk/src/VBox/Runtime/r3/win
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Runtime/r3/win/RTHandleGetStandard-win.cpp
r96407 r96475 51 51 52 52 #include "internal/socket.h" /* (Needs Windows.h.) */ 53 #include "internal-r3-win.h" /* (Needs Windows.h.) */ 53 54 54 55 … … 77 78 return RTErrConvertFromWin32(GetLastError()); 78 79 79 DWORD dwInfo ;80 if ( !GetHandleInformation(hNative, &dwInfo))80 DWORD dwInfo = 0; 81 if (g_pfnGetHandleInformation && !g_pfnGetHandleInformation(hNative, &dwInfo)) 81 82 return RTErrConvertFromWin32(GetLastError()); 82 83 bool const fInherit = RT_BOOL(dwInfo & HANDLE_FLAG_INHERIT); 83 84 85 SetLastError(NO_ERROR); 84 86 RTHANDLE h; 85 87 DWORD dwType = GetFileType(hNative); 86 88 switch (dwType & ~FILE_TYPE_REMOTE) 87 89 { 90 case FILE_TYPE_UNKNOWN: 91 if (GetLastError() != NO_ERROR) 92 return RTErrConvertFromWin32(GetLastError()); 93 RT_FALL_THROUGH(); 88 94 default: 89 case FILE_TYPE_UNKNOWN:90 95 case FILE_TYPE_CHAR: 91 96 case FILE_TYPE_DISK: -
trunk/src/VBox/Runtime/r3/win/init-win.cpp
r96448 r96475 87 87 static LPTOP_LEVEL_EXCEPTION_FILTER g_pfnUnhandledXcptFilter = NULL; 88 88 /** SystemTimeToTzSpecificLocalTime. */ 89 DECL_HIDDEN_DATA(decltype(SystemTimeToTzSpecificLocalTime) *) g_pfnSystemTimeToTzSpecificLocalTime = NULL;89 DECL_HIDDEN_DATA(decltype(SystemTimeToTzSpecificLocalTime) *) g_pfnSystemTimeToTzSpecificLocalTime = NULL; 90 90 /** CreateWaitableTimerEx . */ 91 DECL_HIDDEN_DATA(PFNCREATEWAITABLETIMEREX) g_pfnCreateWaitableTimerExW = NULL; 91 DECL_HIDDEN_DATA(PFNCREATEWAITABLETIMEREX) g_pfnCreateWaitableTimerExW = NULL; 92 DECL_HIDDEN_DATA(decltype(GetHandleInformation) *) g_pfnGetHandleInformation = NULL; 93 DECL_HIDDEN_DATA(decltype(SetHandleInformation) *) g_pfnSetHandleInformation = NULL; 92 94 93 95 /** The native ntdll.dll handle. */ … … 122 124 /** WSAEnumNetworkEvents */ 123 125 DECL_HIDDEN_DATA(PFNWSAENUMNETWORKEVENTS) g_pfnWSAEnumNetworkEvents = NULL; 126 /** WSASocketW */ 127 DECL_HIDDEN_DATA(PFNWSASOCKETW) g_pfnWSASocketW = NULL; 124 128 /** WSASend */ 125 DECL_HIDDEN_DATA(PFNWSAS end) g_pfnWSASend = NULL;129 DECL_HIDDEN_DATA(PFNWSASEND) g_pfnWSASend = NULL; 126 130 /** socket */ 127 131 DECL_HIDDEN_DATA(PFNWINSOCKSOCKET) g_pfnsocket = NULL; … … 311 315 312 316 /* 313 * Use the NT version of GetVersionExW so we don't get fooled by314 * compatability shims.317 * Use the NT version of RtlGetVersion (since w2k) so we don't get fooled 318 * by compatability shims. 315 319 */ 316 320 RT_ZERO(g_WinOsInfoEx); … … 326 330 /* 327 331 * Couldn't find it or it failed, try the windows version of the API. 332 * The GetVersionExW API was added in NT 3.51. 328 333 */ 329 334 RT_ZERO(g_WinOsInfoEx); 330 335 g_WinOsInfoEx.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXW); 331 if (!GetVersionExW((POSVERSIONINFOW)&g_WinOsInfoEx)) 336 337 BOOL (__stdcall *pfnGetVersionExW)(OSVERSIONINFOW *); 338 *(FARPROC *)&pfnGetVersionExW = GetProcAddress(g_hModKernel32, "GetVersionExW"); 339 340 if (!pfnGetVersionExW || !pfnGetVersionExW((POSVERSIONINFOW)&g_WinOsInfoEx)) 332 341 { 333 342 /* … … 336 345 RT_ZERO(g_WinOsInfoEx); 337 346 g_WinOsInfoEx.dwOSVersionInfoSize = sizeof(OSVERSIONINFOW); 338 if ( GetVersionExW((POSVERSIONINFOW)&g_WinOsInfoEx))347 if (!pfnGetVersionExW || !pfnGetVersionExW((POSVERSIONINFOW)&g_WinOsInfoEx)) 339 348 Assert(g_WinOsInfoEx.dwPlatformId != VER_PLATFORM_WIN32_NT || g_WinOsInfoEx.dwMajorVersion < 5); 340 349 else 341 350 { 351 /* 352 * Okay, nothing worked, so use GetVersion. 353 * This should only happen if we're on NT 3.1 or NT 3.50. 354 * It should never happen for 64-bit builds. 355 */ 356 #ifdef RT_ARCH_X86 357 RT_ZERO(g_WinOsInfoEx); 358 DWORD const dwVersion = GetVersion(); 359 360 /* Common fields: */ 361 g_WinOsInfoEx.dwMajorVersion = dwVersion & 0xff; 362 g_WinOsInfoEx.dwMinorVersion = (dwVersion >> 8) & 0xff; 363 if (!(dwVersion & RT_BIT_32(31))) 364 g_WinOsInfoEx.dwBuildNumber = dwVersion >> 16; 365 else 366 g_WinOsInfoEx.dwBuildNumber = 511; 367 g_WinOsInfoEx.dwPlatformId = VER_PLATFORM_WIN32_NT; 368 g_WinOsInfoEx.wProductType = VER_NT_WORKSTATION; 369 /** @todo get CSD from registry. */ 370 #else 342 371 AssertBreakpoint(); 343 372 RT_ZERO(g_WinOsInfoEx); 373 #endif 344 374 } 345 375 } … … 389 419 g_pfnWSAEventSelect = (decltype(g_pfnWSAEventSelect)) GetProcAddress(g_hModWinSock, "WSAEventSelect"); 390 420 g_pfnWSAEnumNetworkEvents = (decltype(g_pfnWSAEnumNetworkEvents))GetProcAddress(g_hModWinSock,"WSAEnumNetworkEvents"); 421 g_pfnWSASocketW = (decltype(g_pfnWSASocketW)) GetProcAddress(g_hModWinSock, "WSASocketW"); 391 422 g_pfnWSASend = (decltype(g_pfnWSASend)) GetProcAddress(g_hModWinSock, "WSASend"); 392 423 g_pfnsocket = (decltype(g_pfnsocket)) GetProcAddress(g_hModWinSock, "socket"); … … 419 450 Assert(g_pfnWSAEventSelect || g_fOldWinSock); 420 451 Assert(g_pfnWSAEnumNetworkEvents || g_fOldWinSock); 452 Assert(g_pfnWSASocketW || g_fOldWinSock); 421 453 Assert(g_pfnWSASend || g_fOldWinSock); 422 454 Assert(g_pfnsocket); … … 530 562 * present in older windows versions. 531 563 */ 532 g_pfnGetSystemWindowsDirectoryW = (PFNGETWINSYSDIR)GetProcAddress(g_hModKernel32, "GetSystemWindowsDirectoryW");564 g_pfnGetSystemWindowsDirectoryW = (PFNGETWINSYSDIR)GetProcAddress(g_hModKernel32, "GetSystemWindowsDirectoryW"); 533 565 if (g_pfnGetSystemWindowsDirectoryW) 534 g_pfnGetSystemWindowsDirectoryW = (PFNGETWINSYSDIR)GetProcAddress(g_hModKernel32, "GetWindowsDirectoryW");566 g_pfnGetSystemWindowsDirectoryW = (PFNGETWINSYSDIR)GetProcAddress(g_hModKernel32, "GetWindowsDirectoryW"); 535 567 g_pfnSystemTimeToTzSpecificLocalTime = (decltype(SystemTimeToTzSpecificLocalTime) *)GetProcAddress(g_hModKernel32, "SystemTimeToTzSpecificLocalTime"); 536 g_pfnCreateWaitableTimerExW = (PFNCREATEWAITABLETIMEREX)GetProcAddress(g_hModKernel32, "CreateWaitableTimerExW"); 568 g_pfnCreateWaitableTimerExW = (PFNCREATEWAITABLETIMEREX) GetProcAddress(g_hModKernel32, "CreateWaitableTimerExW"); 569 g_pfnGetHandleInformation = (decltype(GetHandleInformation) *)GetProcAddress(g_hModKernel32, "GetHandleInformation"); 570 g_pfnSetHandleInformation = (decltype(SetHandleInformation) *)GetProcAddress(g_hModKernel32, "SetHandleInformation"); 571 Assert(g_pfnSetHandleInformation || g_enmWinVer < kRTWinOSType_NT351); 572 Assert(g_pfnGetHandleInformation || g_enmWinVer < kRTWinOSType_NT351); 537 573 538 574 /* 539 575 * Resolve some ntdll.dll APIs that weren't there in early NT versions. 540 576 */ 541 g_pfnNtQueryFullAttributesFile = (PFNNTQUERYFULLATTRIBUTESFILE)GetProcAddress(g_hModNtDll, "NtQueryFullAttributesFile");542 g_pfnNtDuplicateToken = (PFNNTDUPLICATETOKEN)GetProcAddress( g_hModNtDll, "NtDuplicateToken");543 g_pfnNtAlertThread = (decltype(NtAlertThread) *)GetProcAddress( g_hModNtDll, "NtAlertThread");577 g_pfnNtQueryFullAttributesFile = (PFNNTQUERYFULLATTRIBUTESFILE)GetProcAddress(g_hModNtDll, "NtQueryFullAttributesFile"); 578 g_pfnNtDuplicateToken = (PFNNTDUPLICATETOKEN)GetProcAddress( g_hModNtDll, "NtDuplicateToken"); 579 g_pfnNtAlertThread = (decltype(NtAlertThread) *)GetProcAddress( g_hModNtDll, "NtAlertThread"); 544 580 545 581 /* -
trunk/src/VBox/Runtime/r3/win/internal-r3-win.h
r96407 r96475 117 117 typedef UINT (WINAPI *PFNGETWINSYSDIR)(LPWSTR,UINT); 118 118 extern DECL_HIDDEN_DATA(PFNGETWINSYSDIR) g_pfnGetSystemWindowsDirectoryW; 119 extern DECL_HIDDEN_DATA(decltype(SystemTimeToTzSpecificLocalTime) *) g_pfnSystemTimeToTzSpecificLocalTime;119 extern DECL_HIDDEN_DATA(decltype(SystemTimeToTzSpecificLocalTime) *) g_pfnSystemTimeToTzSpecificLocalTime; 120 120 typedef HANDLE (WINAPI *PFNCREATEWAITABLETIMEREX)(LPSECURITY_ATTRIBUTES, LPCWSTR, DWORD, DWORD); 121 121 extern DECL_HIDDEN_DATA(PFNCREATEWAITABLETIMEREX) g_pfnCreateWaitableTimerExW; 122 extern DECL_HIDDEN_DATA(decltype(GetHandleInformation) *) g_pfnGetHandleInformation; 123 extern DECL_HIDDEN_DATA(decltype(SetHandleInformation) *) g_pfnSetHandleInformation; 124 typedef UINT (WINAPI *PFNGETWINSYSDIR)(LPWSTR,UINT); 125 extern DECL_HIDDEN_DATA(PFNGETWINSYSDIR) g_pfnGetSystemWindowsDirectoryW; 126 122 127 123 128 extern DECL_HIDDEN_DATA(HMODULE) g_hModNtDll; … … 150 155 /** WSAEnumNetworkEvents */ 151 156 typedef int (WINAPI *PFNWSAENUMNETWORKEVENTS)(UINT_PTR, HANDLE, struct _WSANETWORKEVENTS *); 157 /** WSASocketW */ 158 typedef UINT_PTR (WINAPI *PFNWSASOCKETW)(int, int, int, struct _WSAPROTOCOL_INFOW *, unsigned, DWORD); 152 159 /** WSASend */ 153 typedef int (WINAPI *PFNWSASend)(UINT_PTR, struct _WSABUF *, DWORD, LPDWORD, DWORD dwFlags, struct _OVERLAPPED *, uintptr_t /*LPWSAOVERLAPPED_COMPLETION_ROUTINE*/); 160 typedef int (WINAPI *PFNWSASEND)(UINT_PTR, struct _WSABUF *, DWORD, LPDWORD, DWORD dwFlags, 161 struct _OVERLAPPED *, uintptr_t /*LPWSAOVERLAPPED_COMPLETION_ROUTINE*/); 154 162 155 163 /** socket */ … … 201 209 extern DECL_HIDDEN_DATA(PFNWSAEVENTSELECT) g_pfnWSAEventSelect; 202 210 extern DECL_HIDDEN_DATA(PFNWSAENUMNETWORKEVENTS) g_pfnWSAEnumNetworkEvents; 203 extern DECL_HIDDEN_DATA(PFNWSASend) g_pfnWSASend; 211 extern DECL_HIDDEN_DATA(PFNWSASOCKETW) g_pfnWSASocketW; 212 extern DECL_HIDDEN_DATA(PFNWSASEND) g_pfnWSASend; 204 213 extern DECL_HIDDEN_DATA(PFNWINSOCKSOCKET) g_pfnsocket; 205 214 extern DECL_HIDDEN_DATA(PFNWINSOCKCLOSESOCKET) g_pfnclosesocket; -
trunk/src/VBox/Runtime/r3/win/pipe-win.cpp
r96407 r96475 520 520 FILE_PIPE_LOCAL_INFORMATION Info; 521 521 RT_ZERO(Info); 522 if ( g_ enmWinVer != kRTWinOSType_NT310522 if ( g_pfnSetHandleInformation 523 523 && rtPipeQueryNtInfo(pThis, &Info)) 524 524 rc = VINF_SUCCESS; … … 563 563 if ( RT_SUCCESS(rc) 564 564 && hNative2 == INVALID_HANDLE_VALUE 565 && ! SetHandleInformation(hNative,566 HANDLE_FLAG_INHERIT /*dwMask*/,567 fFlags & RTPIPE_N_INHERIT ? HANDLE_FLAG_INHERIT : 0))565 && !g_pfnSetHandleInformation(hNative, 566 HANDLE_FLAG_INHERIT /*dwMask*/, 567 fFlags & RTPIPE_N_INHERIT ? HANDLE_FLAG_INHERIT : 0)) 568 568 { 569 569 rc = RTErrConvertFromWin32(GetLastError()); -
trunk/src/VBox/Runtime/r3/win/process-win.cpp
r96407 r96475 2380 2380 if (*aphStds[i] != INVALID_HANDLE_VALUE) 2381 2381 { 2382 if ( g_enmWinVer == kRTWinOSType_NT310)2382 if (!g_pfnGetHandleInformation) 2383 2383 afInhStds[i] = 0; /* No handle info on NT 3.1, so ASSUME it is not inheritable. */ 2384 else if (! GetHandleInformation(*aphStds[i], &afInhStds[i]))2384 else if (!g_pfnGetHandleInformation(*aphStds[i], &afInhStds[i])) 2385 2385 { 2386 2386 rc = RTErrConvertFromWin32(GetLastError()); … … 2404 2404 && !(afInhStds[i] & HANDLE_FLAG_INHERIT)) 2405 2405 { 2406 if ( g_enmWinVer == kRTWinOSType_NT310)2406 if (!g_pfnSetHandleInformation) 2407 2407 { 2408 2408 if (DuplicateHandle(GetCurrentProcess(), *aphStds[i], GetCurrentProcess(), &ahStdDups[i], … … 2415 2415 } 2416 2416 } 2417 else if (! SetHandleInformation(*aphStds[i], HANDLE_FLAG_INHERIT, HANDLE_FLAG_INHERIT))2417 else if (!g_pfnSetHandleInformation(*aphStds[i], HANDLE_FLAG_INHERIT, HANDLE_FLAG_INHERIT)) 2418 2418 { 2419 2419 rc = RTErrConvertFromWin32(GetLastError()); … … 2529 2529 } 2530 2530 2531 if (g_ enmWinVer != kRTWinOSType_NT310)2531 if (g_pfnSetHandleInformation) 2532 2532 { 2533 2533 /* Undo any handle inherit changes. */ … … 2536 2536 && !(afInhStds[i] & HANDLE_FLAG_INHERIT)) 2537 2537 { 2538 if ( ! SetHandleInformation(*aphStds[i], HANDLE_FLAG_INHERIT, 0)2538 if ( !g_pfnSetHandleInformation(*aphStds[i], HANDLE_FLAG_INHERIT, 0) 2539 2539 && ( GetLastError() != ERROR_INVALID_FUNCTION 2540 2540 || g_enmWinVer != kRTWinOSType_NT310) )
Note:
See TracChangeset
for help on using the changeset viewer.