forked from Chuyu-Team/CPPHelper
/
Base.h
172 lines (88 loc) · 4.91 KB
/
Base.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
#pragma once
#define UMDF_USING_NTSTATUS
#include <Windows.h>
#include "StringI.h"
#include <set>
#include <map>
#include <vector>
#include <winioctl.h>
#include <winscard.h>
#include <wincrypt.h>
#include "km.h"
#define LDR_IS_DATAFILE(handle) (((ULONG_PTR)(handle)) & (ULONG_PTR)1)
#define LDR_IS_IMAGEMAPPING(handle) (((ULONG_PTR)(handle)) & (ULONG_PTR)2)
#define LDR_IS_RESOURCE(handle) (LDR_IS_IMAGEMAPPING(handle) || LDR_IS_DATAFILE(handle))
//计算数组长度
#define ArraySize(Array) (sizeof(Array)/sizeof(*Array))
//生成版本号
#define MakeVersion(v1,v2,v3,v4) (((UINT64)(v4))|((UINT64)v3<<16)|((UINT64)v2<<32)|((UINT64)v1<<48))
#define MakeMiniVersion(v1,v2) (v2|(v1<<16))
#define __StrA(x) #x
#define __StrW(x) _T(__StrA(x))
#define DISM_MSG_PROGRESS 38008 //进度信息wParam为当前完成百分比
#ifdef ENABLE_BACKUP_RESTORE
#define FILE_OPTION FILE_FLAG_BACKUP_SEMANTICS
#define REG_OPTION REG_OPTION_BACKUP_RESTORE
#else
#define FILE_OPTION 0
#define REG_OPTION 0
#endif
typedef DWORD(WINAPI *BaseCallBack)(DWORD MessageId, WPARAM wParam, LPARAM lParam, PVOID UserData);
void FindPath(CStringI FilePath, LPCWSTR SubStr, std::set<CStringI>&FindList, DWORD cchRootPath);
HRESULT RunCmd(LPCWSTR FilePath, CString CmdString, CString* pOutString);
HRESULT RunCmd(LPCWSTR FilePath, CString CmdString,bool Async =false);
HRESULT RunCmd(LPCWSTR FilePath, CString CmdString, DWORD(WINAPI *CallBack)(DWORD dwMessageId, WPARAM wParam, LPARAM lParam, PVOID UserData), LPVOID UserData);
HRESULT QuerySymbolicLinkObject(LPCWSTR LinkName, CString& LinkTarget);
#if _MSC_VER >1500
HRESULT IsoCreateFileByPath(LPCWSTR pIsoPath, LPCWSTR pSrcDir, LPCWSTR VolumeName, BaseCallBack callBack, LPVOID pUserData);
#endif
HRESULT Base642Binary(CStringA& Binary, LPCWSTR Base64String, DWORD cchString = -1);
void Binary2Base64(const void* Src, DWORD ccbSrc, CString& Base64String);
HRESULT Base642Binary(BYTE* pBinary, DWORD& ccbBinary, LPCWSTR Base64String, DWORD cchString = -1);
void ReverseBinary(BYTE* pBinary, DWORD ccbBinary);
BOOL PathIsSameVolume(LPCWSTR Path1, LPCWSTR Path2);
HRESULT AdjustPrivilege(ULONG Privilege, BOOL Enable = TRUE);
HRESULT GetHashByFilePath(LPCWSTR FilePath, ALG_ID Algid, BYTE* pHashData, DWORD cbHashData);
HRESULT GetHashByData(LPCBYTE pData, DWORD cbData, ALG_ID Algid, BYTE* pHashData, DWORD cbHashData);
HRESULT GetMd5ByFilePath(LPCWSTR FilePath, BYTE FileMd5[16]);
HRESULT GetMd5ByData(LPCBYTE pData, DWORD cbData, BYTE FileMd5[16]);
HRESULT GetSha1ByFilePath(LPCWSTR FilePath, BYTE FileSha1[20]);
void PathCat(CString& Path, LPCWSTR Append);
CString PathCat(LPCWSTR Path, LPCWSTR Append);
HRESULT CreateFileByData(LPCWSTR FilePath, LPCWSTR lpName, LPCWSTR lpType, HMODULE hModule);
HRESULT CreateFileByData(LPCWSTR FilePath, const void* pData, DWORD ccbData);
HRESULT CreateFileByZipData(LPCWSTR FilePath, const void* Data, DWORD ccbData);
HRESULT CreateRoot(LPCWSTR FilePath);
HANDLE OpenDriver(LPCWSTR DriverPath, DWORD dwDesiredAccess = GENERIC_READ);
HRESULT GetDriverLayout(HANDLE hDevice, CStringA &Buffer/*DRIVE_LAYOUT_INFORMATION_EX+ n * PARTITION_INFORMATION_EX*/);
HRESULT GetDriverLayout(LPCWSTR DriverPath, CStringA& Buffer);
int GetPartitionDisk(HANDLE hDevice);
HRESULT GetPartitionInfomation(HANDLE hDevice, PARTITION_INFORMATION_EX& PartitionInfo);
int GetPartition(HANDLE hDevice);
HRESULT GetVhdVolumeFilePath(HANDLE hDevice, CString& VHDFilePath);
HRESULT GetVhdVolumeFilePath(LPCWSTR hDevicePath, CString& VHDFilePath);
HRESULT GetDiskCount(std::vector<CString>& pszDevicePath);
byte* IsProcExists(byte* pBase, LPCSTR ProcName);
bool IsProcExists(HANDLE hFile, LPCSTR ProcName);
HRESULT CompressBuffer(const void* Src, DWORD cbSrc, void* Dst, DWORD* pcbDst);
HRESULT DecompressBuffer(const void* Src, DWORD cbSrc, void* Dst, DWORD* pcbDst);
HRESULT NtPath2DosPath(LPCWSTR NtPath,CString& DosPath);
HRESULT LoadString(LPCWSTR FilePath, int Index, CString& String);
HRESULT LoadString(LPCWSTR FilePath, int Index, LPBSTR pString);
//HRESULT LoadString(HMODULE hModule,DWORD Index,CString& String);
#define IMAGE_FIRST_DIRECTORY(ntheader) (IMAGE_DATA_DIRECTORY*)((byte*)IMAGE_FIRST_SECTION(ntheader)-sizeof(IMAGE_DATA_DIRECTORY)*IMAGE_NUMBEROF_DIRECTORY_ENTRIES)
//PROCESSOR_ARCHITECTURE_UNKNOWN
DWORD GetFileArchitecture(LPCWSTR FilePath);
void GetCtlCode(DWORD Code, DWORD& DeviceType, DWORD& Function, DWORD& Method, DWORD& Access);
PVOID64 GetProcAddressEx(HANDLE hProc, HMODULE hModule, LPCSTR lpProcName);
//GetLongPathName的安全封装
HRESULT GetLongPathNameW(_In_ LPCTSTR lpszShortPath, _Inout_ CString& lpszLongPath);
//IsReparseTagNameSurrogate可以使用此函数代替下面函数功能
//bool IsSimpleReparesPoint(DWORD dwReserved0);
byte Char2Hex(wchar_t ch);
CString Binary2String(const byte*pBinaryData, DWORD cbData);
CStringA HexString2Binary(LPCWSTR HexString);
CStringA HexString2Binary(LPCSTR HexString);
HRESULT HresultFromBool();
//检测是否是兼容模式
BOOL IsCompatibilityMode();