#ifndef _PH_PHUTIL_H #define _PH_PHUTIL_H #ifdef __cplusplus extern "C" { #endif extern WCHAR *PhSizeUnitNames[7]; extern ULONG PhMaxSizeUnit; typedef struct _PH_INTEGER_PAIR { LONG X; LONG Y; } PH_INTEGER_PAIR, *PPH_INTEGER_PAIR; typedef struct _PH_SCALABLE_INTEGER_PAIR { union { PH_INTEGER_PAIR Pair; struct { LONG X; LONG Y; }; }; ULONG Scale; } PH_SCALABLE_INTEGER_PAIR, *PPH_SCALABLE_INTEGER_PAIR; typedef struct _PH_RECTANGLE { union { PH_INTEGER_PAIR Position; struct { LONG Left; LONG Top; }; }; union { PH_INTEGER_PAIR Size; struct { LONG Width; LONG Height; }; }; } PH_RECTANGLE, *PPH_RECTANGLE; FORCEINLINE PH_RECTANGLE PhRectToRectangle( _In_ RECT Rect ) { PH_RECTANGLE rectangle; rectangle.Left = Rect.left; rectangle.Top = Rect.top; rectangle.Width = Rect.right - Rect.left; rectangle.Height = Rect.bottom - Rect.top; return rectangle; } FORCEINLINE RECT PhRectangleToRect( _In_ PH_RECTANGLE Rectangle ) { RECT rect; rect.left = Rectangle.Left; rect.top = Rectangle.Top; rect.right = Rectangle.Left + Rectangle.Width; rect.bottom = Rectangle.Top + Rectangle.Height; return rect; } FORCEINLINE VOID PhConvertRect( _Inout_ PRECT Rect, _In_ PRECT ParentRect ) { Rect->right = ParentRect->right - ParentRect->left - Rect->right; Rect->bottom = ParentRect->bottom - ParentRect->top - Rect->bottom; } FORCEINLINE RECT PhMapRect( _In_ RECT InnerRect, _In_ RECT OuterRect ) { RECT rect; rect.left = InnerRect.left - OuterRect.left; rect.top = InnerRect.top - OuterRect.top; rect.right = InnerRect.right - OuterRect.left; rect.bottom = InnerRect.bottom - OuterRect.top; return rect; } PHLIBAPI VOID NTAPI PhAdjustRectangleToBounds( _Inout_ PPH_RECTANGLE Rectangle, _In_ PPH_RECTANGLE Bounds ); PHLIBAPI VOID NTAPI PhCenterRectangle( _Inout_ PPH_RECTANGLE Rectangle, _In_ PPH_RECTANGLE Bounds ); PHLIBAPI VOID NTAPI PhAdjustRectangleToWorkingArea( _In_opt_ HWND hWnd, _Inout_ PPH_RECTANGLE Rectangle ); PHLIBAPI VOID NTAPI PhCenterWindow( _In_ HWND WindowHandle, _In_opt_ HWND ParentWindowHandle ); FORCEINLINE VOID PhLargeIntegerToSystemTime( _Out_ PSYSTEMTIME SystemTime, _In_ PLARGE_INTEGER LargeInteger ) { FILETIME fileTime; fileTime.dwLowDateTime = LargeInteger->LowPart; fileTime.dwHighDateTime = LargeInteger->HighPart; FileTimeToSystemTime(&fileTime, SystemTime); } FORCEINLINE VOID PhLargeIntegerToLocalSystemTime( _Out_ PSYSTEMTIME SystemTime, _In_ PLARGE_INTEGER LargeInteger ) { FILETIME fileTime; FILETIME newFileTime; fileTime.dwLowDateTime = LargeInteger->LowPart; fileTime.dwHighDateTime = LargeInteger->HighPart; FileTimeToLocalFileTime(&fileTime, &newFileTime); FileTimeToSystemTime(&newFileTime, SystemTime); } PHLIBAPI VOID NTAPI PhReferenceObjects( _In_reads_(NumberOfObjects) PVOID *Objects, _In_ ULONG NumberOfObjects ); PHLIBAPI VOID NTAPI PhDereferenceObjects( _In_reads_(NumberOfObjects) PVOID *Objects, _In_ ULONG NumberOfObjects ); PHLIBAPI PPH_STRING NTAPI PhGetMessage( _In_ PVOID DllHandle, _In_ ULONG MessageTableId, _In_ ULONG MessageLanguageId, _In_ ULONG MessageId ); PHLIBAPI PPH_STRING NTAPI PhGetNtMessage( _In_ NTSTATUS Status ); PHLIBAPI PPH_STRING NTAPI PhGetWin32Message( _In_ ULONG Result ); PHLIBAPI INT NTAPI PhShowMessage( _In_ HWND hWnd, _In_ ULONG Type, _In_ PWSTR Format, ... ); PHLIBAPI INT NTAPI PhShowMessage_V( _In_ HWND hWnd, _In_ ULONG Type, _In_ PWSTR Format, _In_ va_list ArgPtr ); #define PhShowError(hWnd, Format, ...) PhShowMessage(hWnd, MB_OK | MB_ICONERROR, Format, __VA_ARGS__) #define PhShowWarning(hWnd, Format, ...) PhShowMessage(hWnd, MB_OK | MB_ICONWARNING, Format, __VA_ARGS__) #define PhShowInformation(hWnd, Format, ...) PhShowMessage(hWnd, MB_OK | MB_ICONINFORMATION, Format, __VA_ARGS__) PHLIBAPI PPH_STRING NTAPI PhGetStatusMessage( _In_ NTSTATUS Status, _In_opt_ ULONG Win32Result ); PHLIBAPI VOID NTAPI PhShowStatus( _In_ HWND hWnd, _In_opt_ PWSTR Message, _In_ NTSTATUS Status, _In_opt_ ULONG Win32Result ); PHLIBAPI BOOLEAN NTAPI PhShowContinueStatus( _In_ HWND hWnd, _In_opt_ PWSTR Message, _In_ NTSTATUS Status, _In_opt_ ULONG Win32Result ); PHLIBAPI BOOLEAN NTAPI PhShowConfirmMessage( _In_ HWND hWnd, _In_ PWSTR Verb, _In_ PWSTR Object, _In_opt_ PWSTR Message, _In_ BOOLEAN Warning ); PHLIBAPI BOOLEAN NTAPI PhFindIntegerSiKeyValuePairs( _In_ PPH_KEY_VALUE_PAIR KeyValuePairs, _In_ ULONG SizeOfKeyValuePairs, _In_ PWSTR String, _Out_ PULONG Integer ); PHLIBAPI BOOLEAN NTAPI PhFindStringSiKeyValuePairs( _In_ PPH_KEY_VALUE_PAIR KeyValuePairs, _In_ ULONG SizeOfKeyValuePairs, _In_ ULONG Integer, _Out_ PWSTR *String ); #define GUID_VERSION_MAC 1 #define GUID_VERSION_DCE 2 #define GUID_VERSION_MD5 3 #define GUID_VERSION_RANDOM 4 #define GUID_VERSION_SHA1 5 #define GUID_VARIANT_NCS_MASK 0x80 #define GUID_VARIANT_NCS 0x00 #define GUID_VARIANT_STANDARD_MASK 0xc0 #define GUID_VARIANT_STANDARD 0x80 #define GUID_VARIANT_MICROSOFT_MASK 0xe0 #define GUID_VARIANT_MICROSOFT 0xc0 #define GUID_VARIANT_RESERVED_MASK 0xe0 #define GUID_VARIANT_RESERVED 0xe0 typedef union _GUID_EX { GUID Guid; UCHAR Data[16]; struct { ULONG TimeLowPart; USHORT TimeMidPart; USHORT TimeHighPart; UCHAR ClockSequenceHigh; UCHAR ClockSequenceLow; UCHAR Node[6]; } s; struct { ULONG Part0; USHORT Part32; UCHAR Part48; UCHAR Part56 : 4; UCHAR Version : 4; UCHAR Variant; UCHAR Part72; USHORT Part80; ULONG Part96; } s2; } GUID_EX, *PGUID_EX; PHLIBAPI VOID NTAPI PhGenerateGuid( _Out_ PGUID Guid ); PHLIBAPI VOID NTAPI PhGenerateGuidFromName( _Out_ PGUID Guid, _In_ PGUID Namespace, _In_ PCHAR Name, _In_ ULONG NameLength, _In_ UCHAR Version ); PHLIBAPI VOID NTAPI PhGenerateRandomAlphaString( _Out_writes_z_(Count) PWSTR Buffer, _In_ ULONG Count ); PHLIBAPI PPH_STRING NTAPI PhEllipsisString( _In_ PPH_STRING String, _In_ ULONG DesiredCount ); PHLIBAPI PPH_STRING NTAPI PhEllipsisStringPath( _In_ PPH_STRING String, _In_ ULONG DesiredCount ); PHLIBAPI BOOLEAN NTAPI PhMatchWildcards( _In_ PWSTR Pattern, _In_ PWSTR String, _In_ BOOLEAN IgnoreCase ); PHLIBAPI PPH_STRING NTAPI PhEscapeStringForMenuPrefix( _In_ PPH_STRINGREF String ); PHLIBAPI LONG NTAPI PhCompareUnicodeStringZIgnoreMenuPrefix( _In_ PWSTR A, _In_ PWSTR B, _In_ BOOLEAN IgnoreCase, _In_ BOOLEAN MatchIfPrefix ); PHLIBAPI PPH_STRING NTAPI PhFormatDate( _In_opt_ PSYSTEMTIME Date, _In_opt_ PWSTR Format ); PHLIBAPI PPH_STRING NTAPI PhFormatTime( _In_opt_ PSYSTEMTIME Time, _In_opt_ PWSTR Format ); PHLIBAPI PPH_STRING NTAPI PhFormatDateTime( _In_opt_ PSYSTEMTIME DateTime ); #define PhaFormatDateTime(DateTime) PH_AUTO_T(PH_STRING, PhFormatDateTime(DateTime)) PHLIBAPI PPH_STRING NTAPI PhFormatTimeSpan( _In_ ULONG64 Ticks, _In_opt_ ULONG Mode ); PHLIBAPI PPH_STRING NTAPI PhFormatTimeSpanRelative( _In_ ULONG64 TimeSpan ); PHLIBAPI PPH_STRING NTAPI PhFormatUInt64( _In_ ULONG64 Value, _In_ BOOLEAN GroupDigits ); #define PhaFormatUInt64(Value, GroupDigits) PH_AUTO_T(PH_STRING, PhFormatUInt64((Value), (GroupDigits))) PHLIBAPI PPH_STRING NTAPI PhFormatDecimal( _In_ PWSTR Value, _In_ ULONG FractionalDigits, _In_ BOOLEAN GroupDigits ); #define PhaFormatDecimal(Value, FractionalDigits, GroupDigits) \ PH_AUTO_T(PH_STRING, PhFormatDecimal((Value), (FractionalDigits), (GroupDigits))) PHLIBAPI PPH_STRING NTAPI PhFormatSize( _In_ ULONG64 Size, _In_ ULONG MaxSizeUnit ); #define PhaFormatSize(Size, MaxSizeUnit) PH_AUTO_T(PH_STRING, PhFormatSize((Size), (MaxSizeUnit))) PHLIBAPI PPH_STRING NTAPI PhFormatGuid( _In_ PGUID Guid ); PHLIBAPI PVOID NTAPI PhGetFileVersionInfo( _In_ PWSTR FileName ); PHLIBAPI ULONG NTAPI PhGetFileVersionInfoLangCodePage( _In_ PVOID VersionInfo ); PHLIBAPI PPH_STRING NTAPI PhGetFileVersionInfoString( _In_ PVOID VersionInfo, _In_ PWSTR SubBlock ); PHLIBAPI PPH_STRING NTAPI PhGetFileVersionInfoString2( _In_ PVOID VersionInfo, _In_ ULONG LangCodePage, _In_ PWSTR StringName ); typedef struct _PH_IMAGE_VERSION_INFO { PPH_STRING CompanyName; PPH_STRING FileDescription; PPH_STRING FileVersion; PPH_STRING ProductName; } PH_IMAGE_VERSION_INFO, *PPH_IMAGE_VERSION_INFO; PHLIBAPI BOOLEAN NTAPI PhInitializeImageVersionInfo( _Out_ PPH_IMAGE_VERSION_INFO ImageVersionInfo, _In_ PWSTR FileName ); PHLIBAPI VOID NTAPI PhDeleteImageVersionInfo( _Inout_ PPH_IMAGE_VERSION_INFO ImageVersionInfo ); PHLIBAPI PPH_STRING NTAPI PhFormatImageVersionInfo( _In_opt_ PPH_STRING FileName, _In_ PPH_IMAGE_VERSION_INFO ImageVersionInfo, _In_opt_ PPH_STRINGREF Indent, _In_opt_ ULONG LineLimit ); PHLIBAPI PPH_STRING NTAPI PhGetFullPath( _In_ PWSTR FileName, _Out_opt_ PULONG IndexOfFileName ); PHLIBAPI PPH_STRING NTAPI PhExpandEnvironmentStrings( _In_ PPH_STRINGREF String ); PHLIBAPI PPH_STRING NTAPI PhGetBaseName( _In_ PPH_STRING FileName ); PHLIBAPI PPH_STRING NTAPI PhGetSystemDirectory( VOID ); PHLIBAPI VOID NTAPI PhGetSystemRoot( _Out_ PPH_STRINGREF SystemRoot ); PHLIBAPI PLDR_DATA_TABLE_ENTRY NTAPI PhFindLoaderEntry( _In_opt_ PVOID DllBase, _In_opt_ PPH_STRINGREF FullDllName, _In_opt_ PPH_STRINGREF BaseDllName ); PHLIBAPI PPH_STRING NTAPI PhGetDllFileName( _In_ PVOID DllHandle, _Out_opt_ PULONG IndexOfFileName ); PHLIBAPI PPH_STRING NTAPI PhGetApplicationFileName( VOID ); PHLIBAPI PPH_STRING NTAPI PhGetApplicationDirectory( VOID ); PHLIBAPI PPH_STRING NTAPI PhGetKnownLocation( _In_ ULONG Folder, _In_opt_ PWSTR AppendPath ); PHLIBAPI NTSTATUS NTAPI PhWaitForMultipleObjectsAndPump( _In_opt_ HWND hWnd, _In_ ULONG NumberOfHandles, _In_ PHANDLE Handles, _In_ ULONG Timeout ); typedef struct _PH_CREATE_PROCESS_INFO { PUNICODE_STRING DllPath; PUNICODE_STRING WindowTitle; PUNICODE_STRING DesktopInfo; PUNICODE_STRING ShellInfo; PUNICODE_STRING RuntimeData; } PH_CREATE_PROCESS_INFO, *PPH_CREATE_PROCESS_INFO; #define PH_CREATE_PROCESS_INHERIT_HANDLES 0x1 #define PH_CREATE_PROCESS_UNICODE_ENVIRONMENT 0x2 #define PH_CREATE_PROCESS_SUSPENDED 0x4 #define PH_CREATE_PROCESS_BREAKAWAY_FROM_JOB 0x8 #define PH_CREATE_PROCESS_NEW_CONSOLE 0x10 PHLIBAPI NTSTATUS NTAPI PhCreateProcess( _In_ PWSTR FileName, _In_opt_ PPH_STRINGREF CommandLine, _In_opt_ PVOID Environment, _In_opt_ PPH_STRINGREF CurrentDirectory, _In_opt_ PPH_CREATE_PROCESS_INFO Information, _In_ ULONG Flags, _In_opt_ HANDLE ParentProcessHandle, _Out_opt_ PCLIENT_ID ClientId, _Out_opt_ PHANDLE ProcessHandle, _Out_opt_ PHANDLE ThreadHandle ); PHLIBAPI NTSTATUS NTAPI PhCreateProcessWin32( _In_opt_ PWSTR FileName, _In_opt_ PWSTR CommandLine, _In_opt_ PVOID Environment, _In_opt_ PWSTR CurrentDirectory, _In_ ULONG Flags, _In_opt_ HANDLE TokenHandle, _Out_opt_ PHANDLE ProcessHandle, _Out_opt_ PHANDLE ThreadHandle ); PHLIBAPI NTSTATUS NTAPI PhCreateProcessWin32Ex( _In_opt_ PWSTR FileName, _In_opt_ PWSTR CommandLine, _In_opt_ PVOID Environment, _In_opt_ PWSTR CurrentDirectory, _In_opt_ STARTUPINFO *StartupInfo, _In_ ULONG Flags, _In_opt_ HANDLE TokenHandle, _Out_opt_ PCLIENT_ID ClientId, _Out_opt_ PHANDLE ProcessHandle, _Out_opt_ PHANDLE ThreadHandle ); typedef struct _PH_CREATE_PROCESS_AS_USER_INFO { _In_opt_ PWSTR ApplicationName; _In_opt_ PWSTR CommandLine; _In_opt_ PWSTR CurrentDirectory; _In_opt_ PVOID Environment; _In_opt_ PWSTR DesktopName; _In_opt_ ULONG SessionId; // use PH_CREATE_PROCESS_SET_SESSION_ID union { struct { _In_ PWSTR DomainName; _In_ PWSTR UserName; _In_ PWSTR Password; _In_opt_ ULONG LogonType; }; _In_ HANDLE ProcessIdWithToken; // use PH_CREATE_PROCESS_USE_PROCESS_TOKEN _In_ ULONG SessionIdWithToken; // use PH_CREATE_PROCESS_USE_SESSION_TOKEN }; } PH_CREATE_PROCESS_AS_USER_INFO, *PPH_CREATE_PROCESS_AS_USER_INFO; #define PH_CREATE_PROCESS_USE_PROCESS_TOKEN 0x1000 #define PH_CREATE_PROCESS_USE_SESSION_TOKEN 0x2000 #define PH_CREATE_PROCESS_USE_LINKED_TOKEN 0x10000 #define PH_CREATE_PROCESS_SET_SESSION_ID 0x20000 #define PH_CREATE_PROCESS_WITH_PROFILE 0x40000 PHLIBAPI NTSTATUS NTAPI PhCreateProcessAsUser( _In_ PPH_CREATE_PROCESS_AS_USER_INFO Information, _In_ ULONG Flags, _Out_opt_ PCLIENT_ID ClientId, _Out_opt_ PHANDLE ProcessHandle, _Out_opt_ PHANDLE ThreadHandle ); PHLIBAPI NTSTATUS NTAPI PhFilterTokenForLimitedUser( _In_ HANDLE TokenHandle, _Out_ PHANDLE NewTokenHandle ); PHLIBAPI VOID NTAPI PhShellExecute( _In_ HWND hWnd, _In_ PWSTR FileName, _In_opt_ PWSTR Parameters ); #define PH_SHELL_EXECUTE_ADMIN 0x1 #define PH_SHELL_EXECUTE_PUMP_MESSAGES 0x2 PHLIBAPI BOOLEAN NTAPI PhShellExecuteEx( _In_opt_ HWND hWnd, _In_ PWSTR FileName, _In_opt_ PWSTR Parameters, _In_ ULONG ShowWindowType, _In_ ULONG Flags, _In_opt_ ULONG Timeout, _Out_opt_ PHANDLE ProcessHandle ); PHLIBAPI VOID NTAPI PhShellExploreFile( _In_ HWND hWnd, _In_ PWSTR FileName ); PHLIBAPI VOID NTAPI PhShellProperties( _In_ HWND hWnd, _In_ PWSTR FileName ); PHLIBAPI PPH_STRING NTAPI PhExpandKeyName( _In_ PPH_STRING KeyName, _In_ BOOLEAN Computer ); PHLIBAPI VOID NTAPI PhShellOpenKey( _In_ HWND hWnd, _In_ PPH_STRING KeyName ); PHLIBAPI PPH_STRING NTAPI PhQueryRegistryString( _In_ HANDLE KeyHandle, _In_opt_ PWSTR ValueName ); typedef struct _PH_FLAG_MAPPING { ULONG Flag1; ULONG Flag2; } PH_FLAG_MAPPING, *PPH_FLAG_MAPPING; PHLIBAPI VOID NTAPI PhMapFlags1( _Inout_ PULONG Value2, _In_ ULONG Value1, _In_ const PH_FLAG_MAPPING *Mappings, _In_ ULONG NumberOfMappings ); PHLIBAPI VOID NTAPI PhMapFlags2( _Inout_ PULONG Value1, _In_ ULONG Value2, _In_ const PH_FLAG_MAPPING *Mappings, _In_ ULONG NumberOfMappings ); PHLIBAPI PVOID NTAPI PhCreateOpenFileDialog( VOID ); PHLIBAPI PVOID NTAPI PhCreateSaveFileDialog( VOID ); PHLIBAPI VOID NTAPI PhFreeFileDialog( _In_ PVOID FileDialog ); PHLIBAPI BOOLEAN NTAPI PhShowFileDialog( _In_ HWND hWnd, _In_ PVOID FileDialog ); #define PH_FILEDIALOG_CREATEPROMPT 0x1 #define PH_FILEDIALOG_PATHMUSTEXIST 0x2 // default both #define PH_FILEDIALOG_FILEMUSTEXIST 0x4 // default open #define PH_FILEDIALOG_SHOWHIDDEN 0x8 #define PH_FILEDIALOG_NODEREFERENCELINKS 0x10 #define PH_FILEDIALOG_OVERWRITEPROMPT 0x20 // default save #define PH_FILEDIALOG_DEFAULTEXPANDED 0x40 #define PH_FILEDIALOG_STRICTFILETYPES 0x80 #define PH_FILEDIALOG_PICKFOLDERS 0x100 PHLIBAPI ULONG NTAPI PhGetFileDialogOptions( _In_ PVOID FileDialog ); PHLIBAPI VOID NTAPI PhSetFileDialogOptions( _In_ PVOID FileDialog, _In_ ULONG Options ); PHLIBAPI ULONG NTAPI PhGetFileDialogFilterIndex( _In_ PVOID FileDialog ); typedef struct _PH_FILETYPE_FILTER { PWSTR Name; PWSTR Filter; } PH_FILETYPE_FILTER, *PPH_FILETYPE_FILTER; PHLIBAPI VOID NTAPI PhSetFileDialogFilter( _In_ PVOID FileDialog, _In_ PPH_FILETYPE_FILTER Filters, _In_ ULONG NumberOfFilters ); PHLIBAPI PPH_STRING NTAPI PhGetFileDialogFileName( _In_ PVOID FileDialog ); PHLIBAPI VOID NTAPI PhSetFileDialogFileName( _In_ PVOID FileDialog, _In_ PWSTR FileName ); PHLIBAPI NTSTATUS NTAPI PhIsExecutablePacked( _In_ PWSTR FileName, _Out_ PBOOLEAN IsPacked, _Out_opt_ PULONG NumberOfModules, _Out_opt_ PULONG NumberOfFunctions ); PHLIBAPI ULONG NTAPI PhCrc32( _In_ ULONG Crc, _In_reads_(Length) PCHAR Buffer, _In_ SIZE_T Length ); typedef enum _PH_HASH_ALGORITHM { Md5HashAlgorithm, Sha1HashAlgorithm, Crc32HashAlgorithm } PH_HASH_ALGORITHM; typedef struct _PH_HASH_CONTEXT { PH_HASH_ALGORITHM Algorithm; ULONG Context[64]; } PH_HASH_CONTEXT, *PPH_HASH_CONTEXT; PHLIBAPI VOID NTAPI PhInitializeHash( _Out_ PPH_HASH_CONTEXT Context, _In_ PH_HASH_ALGORITHM Algorithm ); PHLIBAPI VOID NTAPI PhUpdateHash( _Inout_ PPH_HASH_CONTEXT Context, _In_reads_bytes_(Length) PVOID Buffer, _In_ ULONG Length ); PHLIBAPI BOOLEAN NTAPI PhFinalHash( _Inout_ PPH_HASH_CONTEXT Context, _Out_writes_bytes_(HashLength) PVOID Hash, _In_ ULONG HashLength, _Out_opt_ PULONG ReturnLength ); typedef enum _PH_COMMAND_LINE_OPTION_TYPE { NoArgumentType, MandatoryArgumentType, OptionalArgumentType } PH_COMMAND_LINE_OPTION_TYPE, *PPH_COMMAND_LINE_OPTION_TYPE; typedef struct _PH_COMMAND_LINE_OPTION { ULONG Id; PWSTR Name; PH_COMMAND_LINE_OPTION_TYPE Type; } PH_COMMAND_LINE_OPTION, *PPH_COMMAND_LINE_OPTION; typedef BOOLEAN (NTAPI *PPH_COMMAND_LINE_CALLBACK)( _In_opt_ PPH_COMMAND_LINE_OPTION Option, _In_opt_ PPH_STRING Value, _In_opt_ PVOID Context ); #define PH_COMMAND_LINE_IGNORE_UNKNOWN_OPTIONS 0x1 #define PH_COMMAND_LINE_IGNORE_FIRST_PART 0x2 PHLIBAPI PPH_STRING NTAPI PhParseCommandLinePart( _In_ PPH_STRINGREF CommandLine, _Inout_ PULONG_PTR Index ); PHLIBAPI BOOLEAN NTAPI PhParseCommandLine( _In_ PPH_STRINGREF CommandLine, _In_opt_ PPH_COMMAND_LINE_OPTION Options, _In_ ULONG NumberOfOptions, _In_ ULONG Flags, _In_ PPH_COMMAND_LINE_CALLBACK Callback, _In_opt_ PVOID Context ); PHLIBAPI PPH_STRING NTAPI PhEscapeCommandLinePart( _In_ PPH_STRINGREF String ); PHLIBAPI BOOLEAN NTAPI PhParseCommandLineFuzzy( _In_ PPH_STRINGREF CommandLine, _Out_ PPH_STRINGREF FileName, _Out_ PPH_STRINGREF Arguments, _Out_opt_ PPH_STRING *FullFileName ); #ifdef __cplusplus } #endif #endif