diff options
Diffstat (limited to 'src/inc/winwrap.h')
-rw-r--r-- | src/inc/winwrap.h | 1038 |
1 files changed, 1038 insertions, 0 deletions
diff --git a/src/inc/winwrap.h b/src/inc/winwrap.h new file mode 100644 index 0000000000..91a71b700b --- /dev/null +++ b/src/inc/winwrap.h @@ -0,0 +1,1038 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. +//***************************************************************************** +// WinWrap.h +// +// This file contains wrapper functions for Win32 API's that take strings. +// +// The Common Language Runtime internally uses UNICODE as the internal state +// and string format. This file will undef the mapping macros so that one +// cannot mistakingly call a method that isn't going to work. Instead, you +// have to call the correct wrapper API. +// +//***************************************************************************** + +#ifndef __WIN_WRAP_H__ +#define __WIN_WRAP_H__ + +//********** Macros. ********************************************************** +#if !defined(WIN32_LEAN_AND_MEAN) +#define WIN32_LEAN_AND_MEAN +#endif +#if !defined(WIN32_LEAN_AND_MEAN) +#define INC_OLE2 +#endif + +#ifdef _WIN64 +#define HIWORD64(p) ((ULONG_PTR)(p) >> 16) +#else +#define HIWORD64 HIWORD +#endif + +#define SAFEDELARRAY(p) if ((p) != NULL) { delete [] p; (p) = NULL; } + +// +// WinCE uniformly uses cdecl calling convention on x86. __stdcall is defined as __cdecl in SDK. +// STDCALL macro is meant to be used where we have hard dependency on __stdcall calling convention +// - the unification with __cdecl does not apply to STDCALL. +// +#define STDCALL _stdcall + +//********** Includes. ******************************************************** + +#include <crtwrap.h> +#include <windows.h> +#include <wincrypt.h> +#include <specstrings.h> + +#include "registrywrapper.h" +#include "longfilepathwrappers.h" + +#if defined(_PREFAST_) || defined(SOURCE_FORMATTING) +// +// For PREFAST we don't want the C_ASSERT to be expanded since it always +// involves the comparison of two constants which causes PREfast warning 326 +// +#undef C_ASSERT +#define C_ASSERT(expr) +#endif + +#include "palclr.h" + +#if !defined(__TODO_PORT_TO_WRAPPERS__) +//***************************************************************************** +// Undefine all of the windows wrappers so you can't use them. +//***************************************************************************** + +// wincrypt.h +#undef CryptAcquireContext +#undef CryptGetDefaultProvider +#undef CryptSignHash +#undef CryptVerifySignature + +// winbase.h +#undef GetBinaryType +#undef GetShortPathName +#undef GetLongPathName +#undef GetEnvironmentStrings +#undef FreeEnvironmentStrings +#undef FormatMessage +#undef CreateMailslot +#undef EncryptFile +#undef DecryptFile +#undef OpenRaw +#undef QueryRecoveryAgents +#undef lstrcmp +#undef lstrcmpi +#undef lstrcpyn +#undef lstrcpy +#undef lstrcat +#undef lstrlen +#undef CreateMutex +#undef OpenMutex +#undef CreateEvent +#undef OpenEvent +#undef CreateSemaphore +#undef OpenSemaphore +#undef CreateWaitableTimer +#undef OpenWaitableTimer +#undef CreateFileMapping +#undef OpenFileMapping +#undef GetLogicalDriveStrings +#undef LoadLibrary +#undef LoadLibraryEx +#undef GetModuleFileName +#undef GetModuleHandle +#undef GetModuleHandleEx +#undef CreateProcess +#undef FatalAppExit +#undef GetStartupInfo +#undef GetCommandLine +#undef GetEnvironmentVariable +#undef SetEnvironmentVariable +#undef ExpandEnvironmentStrings +#undef OutputDebugString +#undef FindResource +#undef FindResourceEx +#undef EnumResourceTypes +#undef EnumResourceNames +#undef EnumResourceLanguages +#undef BeginUpdateResource +#undef UpdateResource +#undef EndUpdateResource +#undef GlobalAddAtom +#undef GlobalFindAtom +#undef GlobalGetAtomName +#undef AddAtom +#undef FindAtom +#undef GetAtomName +#undef GetProfileInt +#undef GetProfileString +#undef WriteProfileString +#undef GetProfileSection +#undef WriteProfileSection +#undef GetPrivateProfileInt +#undef GetPrivateProfileString +#undef WritePrivateProfileString +#undef GetPrivateProfileSection +#undef WritePrivateProfileSection +#undef GetPrivateProfileSectionNames +#undef GetPrivateProfileStruct +#undef WritePrivateProfileStruct +#undef GetDriveType +#undef GetSystemDirectory +#undef GetTempPath +#undef GetTempFileName +#undef GetWindowsDirectory +#undef SetCurrentDirectory +#undef GetCurrentDirectory +#undef GetDiskFreeSpace +#undef GetDiskFreeSpaceEx +#undef CreateDirectory +#undef CreateDirectoryEx +#undef RemoveDirectory +#undef GetFullPathName +#undef DefineDosDevice +#undef QueryDosDevice +#undef CreateFile +#undef SetFileAttributes +#undef GetFileAttributes +#undef GetFileAttributesEx +#undef GetCompressedFileSize +#undef DeleteFile +#undef FindFirstFileEx +#undef FindFirstFile +#undef FindNextFile +#undef SearchPath +#undef CopyFile +#undef CopyFileEx +#undef MoveFile +#undef MoveFileEx +#undef MoveFileWithProgress +#undef CreateSymbolicLink +#undef QuerySymbolicLink +#undef CreateHardLink +#undef CreateNamedPipe +#undef GetNamedPipeHandleState +#undef CallNamedPipe +#undef WaitNamedPipe +#undef SetVolumeLabel +#undef GetVolumeInformation +#undef ClearEventLog +#undef BackupEventLog +#undef OpenEventLog +#undef RegisterEventSource +#undef OpenBackupEventLog +#undef ReadEventLog +#undef ReportEvent +#undef AccessCheckAndAuditAlarm +#undef AccessCheckByTypeAndAuditAlarm +#undef AccessCheckByTypeResultListAndAuditAlarm +#undef ObjectOpenAuditAlarm +#undef ObjectPrivilegeAuditAlarm +#undef ObjectCloseAuditAlarm +#undef ObjectDeleteAuditAlarm +#undef PrivilegedServiceAuditAlarm +#undef SetFileSecurity +#undef GetFileSecurity +#undef FindFirstChangeNotification +#undef IsBadStringPtr +#undef LookupAccountSid +#undef LookupAccountName +#undef LookupPrivilegeValue +#undef LookupPrivilegeName +#undef LookupPrivilegeDisplayName +#undef BuildCommDCB +#undef BuildCommDCBAndTimeouts +#undef CommConfigDialog +#undef GetDefaultCommConfig +#undef SetDefaultCommConfig +#undef GetComputerName +#undef SetComputerName +#undef GetUserName +#undef LogonUser +#undef CreateProcessAsUser +#undef GetCurrentHwProfile +#undef GetVersionEx +#undef CreateJobObject +#undef OpenJobObject +#undef SetDllDirectory + +// winuser.h +#undef MAKEINTRESOURCE +#undef wvsprintf +#undef wsprintf +#undef LoadKeyboardLayout +#undef GetKeyboardLayoutName +#undef CreateDesktop +#undef OpenDesktop +#undef EnumDesktops +#undef CreateWindowStation +#undef OpenWindowStation +#undef EnumWindowStations +#undef GetUserObjectInformation +#undef SetUserObjectInformation +#undef RegisterWindowMessage +#undef SIZEZOOMSHOW +#undef WS_TILEDWINDOW +#undef GetMessage +#undef DispatchMessage +#undef PeekMessage + +#undef SendMessage +#undef SendMessageTimeout +#undef SendNotifyMessage +#undef SendMessageCallback +#undef BroadcastSystemMessage +#undef RegisterDeviceNotification +#undef PostMessage +#undef PostThreadMessage +#undef PostAppMessage +#undef DefWindowProc +#undef CallWindowProc +#undef RegisterClass +#undef UnregisterClass +#undef GetClassInfo +#undef RegisterClassEx +#undef GetClassInfoEx +#undef CreateWindowEx +#undef CreateWindow +#undef CreateDialogParam +#undef CreateDialogIndirectParam +#undef CreateDialog +#undef CreateDialogIndirect +#undef DialogBoxParam +#undef DialogBoxIndirectParam +#undef DialogBox +#undef DialogBoxIndirect +#undef SetDlgItemText +#undef GetDlgItemText +#undef SendDlgItemMessage +#undef DefDlgProc +#undef CallMsgFilter +#undef RegisterClipboardFormat +#undef GetClipboardFormatName +#undef CharToOem +#undef OemToChar +#undef CharToOemBuff +#undef OemToCharBuff +#undef CharUpper +#undef CharUpperBuff +#undef CharLower +#undef CharLowerBuff +#undef CharNext +#undef IsCharAlpha +#undef IsCharAlphaNumeric +#undef IsCharUpper +#undef IsCharLower +#undef GetKeyNameText +#undef VkKeyScan +#undef VkKeyScanEx +#undef MapVirtualKey +#undef MapVirtualKeyEx +#undef LoadAccelerators +#undef CreateAcceleratorTable +#undef CopyAcceleratorTable +#undef TranslateAccelerator +#undef LoadMenu +#undef LoadMenuIndirect +#undef ChangeMenu +#undef GetMenuString +#undef InsertMenu +#undef AppendMenu +#undef ModifyMenu +#undef InsertMenuItem +#undef GetMenuItemInfo +#undef SetMenuItemInfo +#undef DrawText +#undef DrawTextEx +#undef GrayString +#undef DrawState +#undef TabbedTextOut +#undef GetTabbedTextExtent +#undef SetProp +#undef GetProp +#undef RemoveProp +#undef EnumPropsEx +#undef EnumProps +#undef SetWindowText +#undef GetWindowText +#undef GetWindowTextLength +#undef MessageBox +#undef MessageBoxEx +#undef MessageBoxIndirect +#undef COLOR_3DSHADOW +#undef GetWindowLong +#undef SetWindowLong +#undef GetClassLong +#undef SetClassLong +#undef FindWindow +#undef FindWindowEx +#undef GetClassName +#undef SetWindowsHook +#undef SetWindowsHook +#undef SetWindowsHookEx +#undef MFT_OWNERDRAW +#undef LoadBitmap +#undef LoadCursor +#undef LoadCursorFromFile +#undef LoadIcon +#undef LoadImage +#undef LoadString +#undef IsDialogMessage +#undef DlgDirList +#undef DlgDirSelectEx +#undef DlgDirListComboBox +#undef DlgDirSelectComboBoxEx +#undef DefFrameProc +#undef DefMDIChildProc +#undef CreateMDIWindow +#undef WinHelp +#undef ChangeDisplaySettings +#undef ChangeDisplaySettingsEx +#undef EnumDisplaySettings +#undef EnumDisplayDevices +#undef SystemParametersInfo +#undef GetMonitorInfo +#undef GetWindowModuleFileName +#undef RealGetWindowClass +#undef GetAltTabInfo +#undef GetCalendarInfo +#undef GetDateFormat +#undef GetTimeFormat +#undef LCMapString + +// winnetwk.h +#undef WNetGetConnection + +// Win32 Fusion API's +#undef QueryActCtxW + +#endif // !defined(__TODO_PORT_TO_WRAPPERS__) + +// +// NT supports the wide entry points. So we redefine the wrappers right back +// to the *W entry points as macros. This way no client code needs a wrapper on NT. +// + +// wincrypt.h +#define WszCryptAcquireContext CryptAcquireContextW +#define WszCryptGetDefaultProvider CryptGetDefaultProviderW +#define WszCryptSignHash CryptSignHashW +#define WszCryptVerifySignature CryptVerifySignatureW + +// winbase.h +#define WszGetEnvironmentStrings GetEnvironmentStringsW +#define WszFreeEnvironmentStrings FreeEnvironmentStringsW +#ifndef USE_FORMATMESSAGE_WRAPPER +#define WszFormatMessage FormatMessageW +#else +#define WszFormatMessage CCompRC::FormatMessage +#endif +#define WszCreateMailslot CreateMailslotW +#define WszOpenRaw OpenRawW +#define WszQueryRecoveryAgents QueryRecoveryAgentsW +#define Wszlstrcmp lstrcmpW +#define Wszlstrcmpi lstrcmpiW +#define Wszlstrcpy lstrcpyW +#define Wszlstrcat lstrcatW +#define WszCreateMutex CreateMutexW +#define WszOpenMutex OpenMutexW +#define WszCreateEvent CreateEventW +#define WszOpenEvent OpenEventW +#define WszCreateWaitableTimer CreateWaitableTimerW +#define WszOpenWaitableTimer OpenWaitableTimerW +#define WszCreateFileMapping CreateFileMappingW +#define WszOpenFileMapping OpenFileMappingW +#define WszGetLogicalDriveStrings GetLogicalDriveStringsW +#define WszGetModuleHandle GetModuleHandleW +#define WszGetModuleHandleEx GetModuleHandleExW +#define WszFatalAppExit FatalAppExitW +#define WszGetStartupInfo GetStartupInfoW +#define WszGetCommandLine GetCommandLineW +#define WszSetEnvironmentVariable SetEnvironmentVariableW +#define WszExpandEnvironmentStrings ExpandEnvironmentStringsW +#define WszOutputDebugString OutputDebugStringW +#define WszFindResource FindResourceW +#define WszFindResourceEx FindResourceExW +#define WszEnumResourceTypes EnumResourceTypesW +#define WszEnumResourceNames EnumResourceNamesW +#define WszEnumResourceLanguages EnumResourceLanguagesW +#define WszBeginUpdateResource BeginUpdateResourceW +#define WszUpdateResource UpdateResourceW +#define WszEndUpdateResource EndUpdateResourceW +#define WszGlobalAddAtom GlobalAddAtomW +#define WszGlobalFindAtom GlobalFindAtomW +#define WszGlobalGetAtomName GlobalGetAtomNameW +#define WszAddAtom AddAtomW +#define WszFindAtom FindAtomW +#define WszGetAtomName GetAtomNameW +#define WszGetProfileInt GetProfileIntW +#define WszGetProfileString GetProfileStringW +#define WszWriteProfileString WriteProfileStringW +#define WszGetProfileSection GetProfileSectionW +#define WszWriteProfileSection WriteProfileSectionW +#define WszGetPrivateProfileInt GetPrivateProfileIntW +#define WszGetPrivateProfileString GetPrivateProfileStringW +#define WszWritePrivateProfileString WritePrivateProfileStringW +#define WszGetPrivateProfileSection GetPrivateProfileSectionW +#define WszWritePrivateProfileSection WritePrivateProfileSectionW +#define WszGetPrivateProfileSectionNames GetPrivateProfileSectionNamesW +#define WszGetPrivateProfileStruct GetPrivateProfileStructW +#define WszWritePrivateProfileStruct WritePrivateProfileStructW +#define WszGetDriveType GetDriveTypeW +#define WszGetSystemDirectory GetSystemDirectoryW +#define WszGetWindowsDirectory GetWindowsDirectoryW +#define WszGetDiskFreeSpace GetDiskFreeSpaceW +#define WszGetDiskFreeSpaceEx GetDiskFreeSpaceExW +#define WszDefineDosDevice DefineDosDeviceW +#define WszQueryDosDevice QueryDosDeviceW +#define WszQuerySymbolicLink QuerySymbolicLinkW +#define WszCreateNamedPipe CreateNamedPipeW +#define WszGetNamedPipeHandleState GetNamedPipeHandleStateW +#define WszCallNamedPipe CallNamedPipeW +#define WszWaitNamedPipe WaitNamedPipeW +#define WszSetVolumeLabel SetVolumeLabelW +#define WszGetVolumeInformation GetVolumeInformationW +#define WszClearEventLog ClearEventLogW +#define WszBackupEventLog BackupEventLogW +#define WszOpenEventLog OpenEventLogW +#define WszRegisterEventSource RegisterEventSourceW +#define WszOpenBackupEventLog OpenBackupEventLogW +#define WszReadEventLog ReadEventLogW +#define WszReportEvent ReportEventW +#define WszAccessCheckAndAuditAlarm AccessCheckAndAuditAlarmW +#define WszAccessCheckByTypeAndAuditAlarm AccessCheckByTypeAndAuditAlarmW +#define WszAccessCheckByTypeResultListAndAuditAlarm AccessCheckByTypeResultListAndAuditAlarmW +#define WszObjectOpenAuditAlarm ObjectOpenAuditAlarmW +#define WszObjectPrivilegeAuditAlarm ObjectPrivilegeAuditAlarmW +#define WszObjectCloseAuditAlarm ObjectCloseAuditAlarmW +#define WszObjectDeleteAuditAlarm ObjectDeleteAuditAlarmW +#define WszPrivilegedServiceAuditAlarm PrivilegedServiceAuditAlarmW +#define WszIsBadStringPtr __DO_NOT_USE__WszIsBadStringPtr__ +#if !defined(FEATURE_CORESYSTEM) || defined(CROSSGEN_COMPILE) +#define WszLookupAccountSid LookupAccountSidW +#endif +#define WszLookupAccountName LookupAccountNameW +#define WszLookupPrivilegeValue LookupPrivilegeValueW +#define WszLookupPrivilegeName LookupPrivilegeNameW +#define WszLookupPrivilegeDisplayName LookupPrivilegeDisplayNameW +#define WszBuildCommDCB BuildCommDCBW +#define WszBuildCommDCBAndTimeouts BuildCommDCBAndTimeoutsW +#define WszCommConfigDialog CommConfigDialogW +#define WszGetDefaultCommConfig GetDefaultCommConfigW +#define WszSetDefaultCommConfig SetDefaultCommConfigW +#define WszGetComputerName GetComputerNameW +#define WszSetComputerName SetComputerNameW +#define WszGetUserName GetUserNameW +#define WszLogonUser LogonUserW +#define WszCreateProcessAsUser CreateProcessAsUserW +#define WszGetCurrentHwProfile GetCurrentHwProfileW +#define WszGetVersionEx GetVersionExW +#define WszCreateJobObject CreateJobObjectW +#define WszOpenJobObject OpenJobObjectW + +// winuser.h +#define WszMAKEINTRESOURCE MAKEINTRESOURCEW +#define Wszwvsprintf wvsprintfW +#define WszLoadKeyboardLayout LoadKeyboardLayoutW +#define WszGetKeyboardLayoutName GetKeyboardLayoutNameW +#define WszCreateDesktop CreateDesktopW +#define WszOpenDesktop OpenDesktopW +#define WszEnumDesktops EnumDesktopsW +#define WszCreateWindowStation CreateWindowStationW +#define WszOpenWindowStation OpenWindowStationW +#define WszEnumWindowStations EnumWindowStationsW +#define WszGetUserObjectInformation GetUserObjectInformationW +#define WszSetUserObjectInformation SetUserObjectInformationW +#define WszRegisterWindowMessage RegisterWindowMessageW +#define WszSIZEZOOMSHOW SIZEZOOMSHOWW +#define WszWS_TILEDWINDOW WS_TILEDWINDOWW +#define WszGetMessage GetMessageW +#define WszDispatchMessage DispatchMessageW +#define WszPostMessage PostMessageW +#define WszPeekMessage PeekMessageW +#define WszSendMessage SendMessageW +#define WszSendMessageTimeout SendMessageTimeoutW +#define WszSendNotifyMessage SendNotifyMessageW +#define WszSendMessageCallback SendMessageCallbackW +#define WszBroadcastSystemMessage BroadcastSystemMessageW +#define WszRegisterDeviceNotification RegisterDeviceNotificationW +#define WszPostMessage PostMessageW +#define WszPostThreadMessage PostThreadMessageW +#define WszPostAppMessage PostAppMessageW +#define WszDefWindowProc DefWindowProcW +#define WszCallWindowProc CallWindowProcW +#define WszRegisterClass RegisterClassW +#define WszUnregisterClass UnregisterClassW +#define WszGetClassInfo GetClassInfoW +#define WszRegisterClassEx RegisterClassExW +#define WszGetClassInfoEx GetClassInfoExW +#define WszCreateWindowEx CreateWindowExW +#define WszCreateWindow CreateWindowW +#define WszCreateDialogParam CreateDialogParamW +#define WszCreateDialogIndirectParam CreateDialogIndirectParamW +#define WszCreateDialog CreateDialogW +#define WszCreateDialogIndirect CreateDialogIndirectW +#define WszDialogBoxParam DialogBoxParamW +#define WszDialogBoxIndirectParam DialogBoxIndirectParamW +#define WszDialogBox DialogBoxW +#define WszDialogBoxIndirect DialogBoxIndirectW +#define WszSetDlgItemText SetDlgItemTextW +#define WszGetDlgItemText GetDlgItemTextW +#define WszSendDlgItemMessage SendDlgItemMessageW +#define WszDefDlgProc DefDlgProcW +#define WszCallMsgFilter CallMsgFilterW +#define WszRegisterClipboardFormat RegisterClipboardFormatW +#define WszGetClipboardFormatName GetClipboardFormatNameW +#define WszCharToOem CharToOemW +#define WszOemToChar OemToCharW +#define WszCharToOemBuff CharToOemBuffW +#define WszOemToCharBuff OemToCharBuffW +#define WszCharUpper CharUpperW +#define WszCharUpperBuff CharUpperBuffW +#define WszCharLower CharLowerW +#define WszCharLowerBuff CharLowerBuffW +#define WszCharNext CharNextW +#define WszIsCharAlpha IsCharAlphaW +#define WszIsCharAlphaNumeric IsCharAlphaNumericW +#define WszIsCharUpper IsCharUpperW +#define WszIsCharLower IsCharLowerW +#define WszGetKeyNameText GetKeyNameTextW +#define WszVkKeyScan VkKeyScanW +#define WszVkKeyScanEx VkKeyScanExW +#define WszMapVirtualKey MapVirtualKeyW +#define WszMapVirtualKeyEx MapVirtualKeyExW +#define WszLoadAccelerators LoadAcceleratorsW +#define WszCreateAcceleratorTable CreateAcceleratorTableW +#define WszCopyAcceleratorTable CopyAcceleratorTableW +#define WszTranslateAccelerator TranslateAcceleratorW +#define WszLoadMenu LoadMenuW +#define WszLoadMenuIndirect LoadMenuIndirectW +#define WszChangeMenu ChangeMenuW +#define WszGetMenuString GetMenuStringW +#define WszInsertMenu InsertMenuW +#define WszAppendMenu AppendMenuW +#define WszModifyMenu ModifyMenuW +#define WszInsertMenuItem InsertMenuItemW +#define WszGetMenuItemInfo GetMenuItemInfoW +#define WszSetMenuItemInfo SetMenuItemInfoW +#define WszDrawText DrawTextW +#define WszDrawTextEx DrawTextExW +#define WszGrayString GrayStringW +#define WszDrawState DrawStateW +#define WszTabbedTextOut TabbedTextOutW +#define WszGetTabbedTextExtent GetTabbedTextExtentW +#define WszSetProp SetPropW +#define WszGetProp GetPropW +#define WszRemoveProp RemovePropW +#define WszEnumPropsEx EnumPropsExW +#define WszEnumProps EnumPropsW +#define WszSetWindowText SetWindowTextW +#define WszGetWindowText GetWindowTextW +#define WszGetWindowTextLength GetWindowTextLengthW +#define WszMessageBox LateboundMessageBoxW +#define WszMessageBoxEx MessageBoxExW +#define WszMessageBoxIndirect MessageBoxIndirectW +#define WszGetWindowLong GetWindowLongW +#define WszSetWindowLong SetWindowLongW +#define WszSetWindowLongPtr SetWindowLongPtrW +#define WszGetWindowLongPtr GetWindowLongPtrW +#define WszGetClassLong GetClassLongW +#define WszSetClassLong SetClassLongW +#define WszFindWindow FindWindowW +#define WszFindWindowEx FindWindowExW +#define WszGetClassName GetClassNameW +#define WszSetWindowsHook SetWindowsHookW +#define WszSetWindowsHook SetWindowsHookW +#define WszSetWindowsHookEx SetWindowsHookExW +#define WszLoadBitmap LoadBitmapW +#define WszLoadCursor LoadCursorW +#define WszLoadCursorFromFile LoadCursorFromFileW +#define WszLoadIcon LoadIconW +#define WszLoadImage LoadImageW +#define WszLoadString LoadStringW +#define WszIsDialogMessage IsDialogMessageW +#define WszDlgDirList DlgDirListW +#define WszDlgDirSelectEx DlgDirSelectExW +#define WszDlgDirListComboBox DlgDirListComboBoxW +#define WszDlgDirSelectComboBoxEx DlgDirSelectComboBoxExW +#define WszDefFrameProc DefFrameProcW +#define WszDefMDIChildProc DefMDIChildProcW +#define WszCreateMDIWindow CreateMDIWindowW +#define WszWinHelp WinHelpW +#define WszChangeDisplaySettings ChangeDisplaySettingsW +#define WszChangeDisplaySettingsEx ChangeDisplaySettingsExW +#define WszEnumDisplaySettings EnumDisplaySettingsW +#define WszEnumDisplayDevices EnumDisplayDevicesW +#define WszSystemParametersInfo SystemParametersInfoW +#define WszGetMonitorInfo GetMonitorInfoW +#define WszGetWindowModuleFileName GetWindowModuleFileNameW +#define WszRealGetWindowClass RealGetWindowClassW +#define WszGetAltTabInfo GetAltTabInfoW +#define WszRegOpenKeyEx ClrRegOpenKeyEx +#define WszRegOpenKey(hKey, wszSubKey, phkRes) ClrRegOpenKeyEx(hKey, wszSubKey, 0, KEY_ALL_ACCESS, phkRes) +#define WszRegQueryValue RegQueryValueW +#define WszRegQueryValueEx RegQueryValueExW +#define WszRegQueryValueExTrue RegQueryValueExW +#define WszRegQueryStringValueEx RegQueryValueExW + +#ifndef FEATURE_CORECLR +#define WszRegDeleteKey RegDeleteKeyW +#define WszRegCreateKeyEx ClrRegCreateKeyEx +#define WszRegSetValueEx RegSetValueExW +#define WszRegDeleteValue RegDeleteValueW +#define WszRegLoadKey RegLoadKeyW +#define WszRegUnLoadKey RegUnLoadKeyW +#define WszRegRestoreKey RegRestoreKeyW +#define WszRegReplaceKey RegReplaceKeyW +#endif //#ifndef FEATURE_CORECLR + +#define WszRegQueryInfoKey RegQueryInfoKeyW +#define WszRegEnumValue RegEnumValueW +#define WszRegEnumKeyEx RegEnumKeyExW +#define WszGetCalendarInfo GetCalendarInfoW +#define WszGetDateFormat GetDateFormatW +#define WszGetTimeFormat GetTimeFormatW +#define WszLCMapString LCMapStringW +#define WszMultiByteToWideChar MultiByteToWideChar +#define WszWideCharToMultiByte WideCharToMultiByte +#define WszCreateSemaphore CreateSemaphoreW +#define WszQueryActCtxW QueryActCtxW + +// winnetwk.h +#define WszWNetGetConnection WNetGetConnectionW + +#ifdef FEATURE_CORESYSTEM + +// CoreSystem has CreateSemaphoreExW but not CreateSemaphoreW. +#undef WszCreateSemaphore +#define WszCreateSemaphore(_secattr, _count, _maxcount, _name) CreateSemaphoreExW((_secattr), (_count), (_maxcount), (_name), 0, SEMAPHORE_ALL_ACCESS) + +// Same deal as above for GetFileVersionInfo/GetFileVersionInfoSize. +#undef GetFileVersionInfo +#define GetFileVersionInfo(_filename, _handle, _len, _data) GetFileVersionInfoEx(0, (_filename), (_handle), (_len), (_data)) +#undef GetFileVersionInfoSize +#define GetFileVersionInfoSize(_filename, _handle) GetFileVersionInfoSizeEx(0, (_filename), (_handle)) + +#endif // FEATURE_CORESYSTEM + +#ifndef _T +#define _T(str) W(str) +#endif + +// on win98 and higher +#define Wszlstrlen lstrlenW +#define Wszlstrcpy lstrcpyW +#define Wszlstrcat lstrcatW + +//File and Directory Functions which need special handling for LongFile Names +//Note only the functions which are currently used are defined +#define WszLoadLibrary LoadLibraryExWrapper +#define WszLoadLibraryEx LoadLibraryExWrapper +#define WszCreateFile CreateFileWrapper +#define WszSetFileAttributes SetFileAttributesWrapper +#define WszGetFileAttributes GetFileAttributesWrapper +#define WszGetFileAttributesEx GetFileAttributesExWrapper +#define WszDeleteFile DeleteFileWrapper +#define WszFindFirstFileEx FindFirstFileExWrapper +#define WszFindNextFile FindNextFileW +#define WszCopyFile CopyFileWrapper +#define WszCopyFileEx CopyFileExWrapper +#define WszMoveFileEx MoveFileExWrapper +#define WszMoveFile(lpExistingFileName, lpNewFileName) WszMoveFileEx(lpExistingFileName, lpNewFileName, 0) +#define WszCreateDirectory CreateDirectoryWrapper +#define WszRemoveDirectory RemoveDirectoryWrapper +#define WszCreateHardLink CreateHardLinkWrapper + +//Can not use extended syntax +#define WszGetFullPathName GetFullPathNameW + +//Long Files will not work on these till redstone +#define WszGetCurrentDirectory GetCurrentDirectoryWrapper +#define WszGetTempFileName GetTempFileNameWrapper +#define WszGetTempPath GetTempPathWrapper + +//APIS which have a buffer as an out parameter +#define WszGetEnvironmentVariable GetEnvironmentVariableWrapper +#define WszSearchPath SearchPathWrapper +#define WszGetShortPathName GetShortPathNameWrapper +#define WszGetLongPathName GetLongPathNameWrapper +#define WszGetModuleFileName GetModuleFileNameWrapper + +//NOTE: IF the following API's are enabled ensure that they can work with LongFile Names +//See the usage and implementation of above API's +// +//#define WszGetCompressedFileSize GetCompressedFileSizeW +//#define WszMoveFileWithProgress MoveFileWithProgressW +//#define WszEncryptFile EncryptFileW +//#define WszDecryptFile DecryptFileW +//#define WszSetFileSecurity SetFileSecurityW +//#define WszGetFileSecurity GetFileSecurityW +//#define WszFindFirstChangeNotification FindFirstChangeNotificationW +//#define WszSetDllDirectory SetDllDirectoryW +//#define WszSetCurrentDirectory SetCurrentDirectoryW +//#define WszCreateDirectoryEx CreateDirectoryExW +//#define WszCreateSymbolicLink CreateSymbolicLinkW +//#define WszGetBinaryType GetBinaryTypeWrapper //Coresys does not seem to have this API + +#if FEATURE_PAL +#define WszFindFirstFile FindFirstFileW +#else +#define WszFindFirstFile(_lpFileName_, _lpFindData_) FindFirstFileExWrapper(_lpFileName_, FindExInfoStandard, _lpFindData_, FindExSearchNameMatch, NULL, 0) +#endif //FEATURE_PAL +//***************************************************************************** +// Prototypes for API's. +//***************************************************************************** + +extern DWORD g_dwMaxDBCSCharByteSize; + +void EnsureCharSetInfoInitialized(); + +inline DWORD GetMaxDBCSCharByteSize() +{ + // contract.h not visible here + __annotation(W("WRAPPER ") W("GetMaxDBCSCharByteSize")); +#ifndef FEATURE_PAL + EnsureCharSetInfoInitialized(); + + _ASSERTE(g_dwMaxDBCSCharByteSize != 0); + return (g_dwMaxDBCSCharByteSize); +#else // FEATURE_PAL + return 3; +#endif // FEATURE_PAL +} + +#ifndef FEATURE_PAL +BOOL RunningInteractive(); +#else // !FEATURE_PAL +#define RunningInteractive() FALSE +#endif // !FEATURE_PAL + +// Determines if the process is running as Local System or as a service. Note that this function uses the +// process' identity and not the thread's (if the thread is impersonating). +// +// If the function succeeds, it returns ERROR_SUCCESS, else it returns the error code returned by GetLastError() +DWORD RunningAsLocalSystemOrService(OUT BOOL& fIsLocalSystemOrService); + +#ifndef Wsz_mbstowcs +#define Wsz_mbstowcs(szOut, szIn, iSize) WszMultiByteToWideChar(CP_ACP, 0, szIn, -1, szOut, iSize) +#endif + +#ifndef Wsz_wcstombs +#define Wsz_wcstombs(szOut, szIn, iSize) WszWideCharToMultiByte(CP_ACP, 0, szIn, -1, szOut, iSize, 0, 0) +#endif + +// For all platforms: + +BOOL +WszCreateProcess( + LPCWSTR lpApplicationName, + LPCWSTR lpCommandLine, + LPSECURITY_ATTRIBUTES lpProcessAttributes, + LPSECURITY_ATTRIBUTES lpThreadAttributes, + BOOL bInheritHandles, + DWORD dwCreationFlags, + LPVOID lpEnvironment, + LPCWSTR lpCurrentDirectory, + LPSTARTUPINFOW lpStartupInfo, + LPPROCESS_INFORMATION lpProcessInformation + ); + +DWORD +WszGetWorkingSet( + VOID + ); + +SIZE_T WszGetPagefileUsage(); +DWORD WszGetProcessHandleCount(); + +#if defined(_X86_) && defined(_MSC_VER) + +// +// Windows SDK does not use intrinsics on x86. Redefine the interlocked operations to use intrinsics. +// + +#include "intrin.h" + +#define InterlockedIncrement _InterlockedIncrement +#define InterlockedDecrement _InterlockedDecrement +#define InterlockedExchange _InterlockedExchange +#define InterlockedCompareExchange _InterlockedCompareExchange +#define InterlockedExchangeAdd _InterlockedExchangeAdd +#define InterlockedCompareExchange64 _InterlockedCompareExchange64 +#define InterlockedAnd _InterlockedAnd +#define InterlockedOr _InterlockedOr + +// +// There is no _InterlockedCompareExchangePointer intrinsic in VC++ for x86. +// winbase.h #defines InterlockedCompareExchangePointer as __InlineInterlockedCompareExchangePointer, +// which calls the Win32 InterlockedCompareExchange, not the intrinsic _InterlockedCompareExchange. +// We want the intrinsic, so we #undef the Windows version of this API, and define our own. +// +#ifdef InterlockedCompareExchangePointer +#undef InterlockedCompareExchangePointer +#endif + +FORCEINLINE +PVOID +InterlockedCompareExchangePointer ( + __inout PVOID volatile *Destination, + __in_opt PVOID ExChange, + __in_opt PVOID Comperand + ) +{ + return((PVOID)(LONG_PTR)_InterlockedCompareExchange((LONG volatile *)Destination, (LONG)(LONG_PTR)ExChange, (LONG)(LONG_PTR)Comperand)); +} + +#endif // _X86_ && _MSC_VER + +#if defined(_ARM_) & !defined(FEATURE_PAL) +// +// InterlockedCompareExchangeAcquire/InterlockedCompareExchangeRelease is not mapped in SDK to the correct intrinsics. Remove once +// the SDK definition is fixed (OS Bug #516255) +// +#undef InterlockedCompareExchangeAcquire +#define InterlockedCompareExchangeAcquire _InterlockedCompareExchange_acq +#undef InterlockedCompareExchangeRelease +#define InterlockedCompareExchangeRelease _InterlockedCompareExchange_rel +#endif + +#if defined(_X86_) & !defined(InterlockedIncrement64) + +// Interlockedxxx64 that do not have intrinsics are only supported on Windows Server 2003 +// or higher for X86 so define our own portable implementation + +#undef InterlockedIncrement64 +#define InterlockedIncrement64 __InterlockedIncrement64 +#undef InterlockedDecrement64 +#define InterlockedDecrement64 __InterlockedDecrement64 +#undef InterlockedExchange64 +#define InterlockedExchange64 __InterlockedExchange64 +#undef InterlockedExchangeAdd64 +#define InterlockedExchangeAdd64 __InterlockedExchangeAdd64 + +__forceinline LONGLONG __InterlockedIncrement64(LONGLONG volatile *Addend) +{ + LONGLONG Old; + + do { + Old = *Addend; + } while (InterlockedCompareExchange64(Addend, + Old + 1, + Old) != Old); + + return Old + 1; +} + +__forceinline LONGLONG __InterlockedDecrement64(LONGLONG volatile *Addend) +{ + LONGLONG Old; + + do { + Old = *Addend; + } while (InterlockedCompareExchange64(Addend, + Old - 1, + Old) != Old); + + return Old - 1; +} + +__forceinline LONGLONG __InterlockedExchange64(LONGLONG volatile * Target, LONGLONG Value) +{ + LONGLONG Old; + + do { + Old = *Target; + } while (InterlockedCompareExchange64(Target, + Value, + Old) != Old); + + return Old; +} + +__forceinline LONGLONG __InterlockedExchangeAdd64(LONGLONG volatile * Addend, LONGLONG Value) +{ + LONGLONG Old; + + do { + Old = *Addend; + } while (InterlockedCompareExchange64(Addend, + Old + Value, + Old) != Old); + + return Old; +} + +#endif // _X86_ + +// +// RtlVerifyVersionInfo() type mask bits +// Making our copy of type mask bits as the original +// macro name are redefined in public\internal\NDP\inc\product_version.h +// +// +#define CLR_VER_MINORVERSION 0x0000001 +#define CLR_VER_MAJORVERSION 0x0000002 +#define CLR_VER_BUILDNUMBER 0x0000004 +#define CLR_VER_PLATFORMID 0x0000008 +#define CLR_VER_SERVICEPACKMINOR 0x0000010 +#define CLR_VER_SERVICEPACKMAJOR 0x0000020 +#define CLR_VER_SUITENAME 0x0000040 +#define CLR_VER_PRODUCT_TYPE 0x0000080 + +BOOL GetOSVersion(LPOSVERSIONINFOW osVer); + +// Output printf-style formatted text to the debugger if it's present or stdout otherwise. +inline void DbgWPrintf(const LPCWSTR wszFormat, ...) +{ + WCHAR wszBuffer[4096]; + + va_list args; + va_start(args, wszFormat); + + _vsnwprintf_s(wszBuffer, sizeof(wszBuffer) / sizeof(WCHAR), _TRUNCATE, wszFormat, args); + + va_end(args); + + if (IsDebuggerPresent()) + { + OutputDebugStringW(wszBuffer); + } + else + { + fwprintf(stdout, W("%s"), wszBuffer); + fflush(stdout); + } +} + +typedef int (*MessageBoxWFnPtr)(HWND hWnd, + LPCWSTR lpText, + LPCWSTR lpCaption, + UINT uType); + +inline int LateboundMessageBoxW(HWND hWnd, + LPCWSTR lpText, + LPCWSTR lpCaption, + UINT uType) +{ +#ifndef FEATURE_PAL + // User32 should exist on all systems where displaying a message box makes sense. + HMODULE hGuiExtModule = WszLoadLibrary(W("user32")); + if (hGuiExtModule) + { + int result = IDCANCEL; + MessageBoxWFnPtr fnptr = (MessageBoxWFnPtr)GetProcAddress(hGuiExtModule, "MessageBoxW"); + if (fnptr) + result = fnptr(hWnd, lpText, lpCaption, uType); + + FreeLibrary(hGuiExtModule); + return result; + } +#endif // !FEATURE_PAL + + // No luck. Output the caption and text to the debugger if present or stdout otherwise. + if (lpText == NULL) + lpText = W("<null>"); + if (lpCaption == NULL) + lpCaption = W("<null>"); + DbgWPrintf(W("**** MessageBox invoked, title '%s' ****\n"), lpCaption); + DbgWPrintf(W(" %s\n"), lpText); + DbgWPrintf(W("********\n")); + DbgWPrintf(W("\n")); + + // Indicate to the caller that message box was not actually displayed + SetLastError(ERROR_NOT_SUPPORTED); + return 0; +} + +inline int LateboundMessageBoxA(HWND hWnd, + LPCSTR lpText, + LPCSTR lpCaption, + UINT uType) +{ + if (lpText == NULL) + lpText = "<null>"; + if (lpCaption == NULL) + lpCaption = "<null>"; + + SIZE_T cchText = strlen(lpText) + 1; + LPWSTR wszText = (LPWSTR)_alloca(cchText * sizeof(WCHAR)); + swprintf_s(wszText, cchText, W("%S"), lpText); + + SIZE_T cchCaption = strlen(lpCaption) + 1; + LPWSTR wszCaption = (LPWSTR)_alloca(cchCaption * sizeof(WCHAR)); + swprintf_s(wszCaption, cchCaption, W("%S"), lpCaption); + + return LateboundMessageBoxW(hWnd, wszText, wszCaption, uType); +} + +#if defined(FEATURE_CORESYSTEM) && !defined(CROSSGEN_COMPILE) + +#define MessageBoxW LateboundMessageBoxW +#define MessageBoxA LateboundMessageBoxA + +#endif // FEATURE_CORESYSTEM + +#endif // __WIN_WRAP_H__ |