1050 lines
18 KiB
C
1050 lines
18 KiB
C
#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
|