24 #define NTOS_MODE_USER 43 ERR(
"RtlDosPathNameToNtPathName_U failed\n");
61 ERR(
"NtOpenFile failed for %S (Status 0x%08lx)\n", PathBuffer,
Status);
74 ERR(
"NtQueryInformationFile failed for %S (Status: %08lX)\n", PathBuffer,
Status);
87 WARN(
"GetFileVersionInfoSize %ls failed\n", pwszPath);
94 ERR(
"HeapAlloc failed bytes %x\n", cbInfo);
100 ERR(
"GetFileVersionInfoW failed\n");
108 ERR(
"VerQueryValueW failed\n");
146 ERR(
"VerQueryValueW %ls failed\n", pwszName);
148 TRACE(
"%ls: %ls\n", pwszName, pwszResult);
173 ERR(
"VerLanguageNameW failed\n");
187 WCHAR wszDecimalSep[8], wszThousandSep[8];
198 WCHAR wszGrouping[12];
205 for (
INT i = 0;
i < cchGrouping;
i++)
207 WCHAR wch = wszGrouping[
i];
209 if (wch >=
L'0' && wch <=
L'9')
211 else if (wch !=
L';')
232 return cchResult - 1;
244 LPWSTR pwszEnd = pwszResult + cchWritten;
245 size_t cchRemaining = cchResultMax - cchWritten;
248 cchRemaining -= cchWritten;
250 return cchResultMax - cchRemaining;
278 LPWSTR pwszEnd = pwszResult + cchWritten;
279 size_t cchRemaining = cchResultMax - cchWritten;
284 pwszEnd += cchWritten;
285 cchRemaining -= cchWritten;
311 Page.pfnDlgProc = pfnDlgProc;
313 Page.pszTitle = pwszTitle;
333 StringCbCatW(wszBuf,
sizeof(wszBuf),
L"\\shell\\open\\command");
349 RECT rcIcon, rcDescr;
358 INT cxOffset = rcIcon.right + 2 - rcDescr.left;
360 rcDescr.left + cxOffset, rcDescr.top,
361 rcDescr.right - rcDescr.left - cxOffset, rcDescr.bottom - rcDescr.top,
365 ERR(
"Failed to extract icon\n");
371 VerInfo.
Load(wszPath);
380 pwszFilename[0] =
towupper(pwszFilename[0]);
387 WARN(
"RegGetValueW %ls failed\n", wszBuf);
389 WARN(
"RegGetValueW %ls failed\n", pwszExt);
415 if (hDlgCtrl ==
NULL)
435 size_t cchRemaining = 0;
506 size_t cchRemaining = cchResult;
507 LPWSTR pwszEnd = pwszResult;
512 ERR(
"GetDateFormatW failed\n");
513 cchRemaining -= cchWritten;
514 pwszEnd += cchWritten;
522 ERR(
"GetTimeFormatW failed\n");
616 ERR(
"Unreliable size on disk\n");
630 data->hwndDlg = hwndDlg;
644 WCHAR wszFormat[256];
685 RECT rectIdol, rectToAdjust;
732 TRACE(
"WM_INITDIALOG hwnd %p lParam %p ppsplParam %S\n", hwndDlg,
lParam, ppsp->
lParam);
734 pFileDefExt = reinterpret_cast<CFileDefExt *>(ppsp->
lParam);
736 pFileDefExt->InitGeneralPage(hwndDlg);
775 ERR(
"SetFileAttributesW failed\n");
782 UINT cchFilenameMax =
_countof(wszBuf) - (pwszFilename - wszBuf);
786 ERR(
"MoveFileW failed\n");
828 WCHAR wszVersion[256];
879 if (hwndDlg ==
NULL || pwszName ==
NULL)
906 if (hwndDlg ==
NULL || pwszName ==
NULL)
939 if (ppsp ==
NULL || !ppsp->lParam)
942 TRACE(
"WM_INITDIALOG hwnd %p lParam %p ppsplParam %x\n", hwndDlg,
lParam, ppsp->lParam);
944 CFileDefExt *pFileDefExt = reinterpret_cast<CFileDefExt *>(ppsp->lParam);
957 if (pwszData ==
NULL)
996 if (ppsp ==
NULL || !ppsp->lParam)
999 TRACE(
"WM_INITDIALOG hwnd %p lParam %p ppsplParam %x\n", hwndDlg,
lParam, ppsp->lParam);
1001 pFileDefExt = reinterpret_cast<CFileDefExt *>(ppsp->lParam);
1224 m_bDir(
FALSE), m_cFiles(0), m_cFolders(0)
1248 TRACE(
"%p %p %p %p\n",
this, pidlFolder, pDataObj, hkeyProgID);
1255 format.dwAspect = DVASPECT_CONTENT;
1257 format.tymed = TYMED_HGLOBAL;
1265 ERR(
"DragQueryFileW failed\n");
1312 pfnAddPage(hPage,
lParam);
1321 pfnAddPage(hPage,
lParam);
1331 pfnAddPage(hPage,
lParam);
1363 data->This->CountFolderAndFiles(
data->hwndDlg,
data->pwszBuf, &ticks);
1366 data->This->Release();
1386 ERR(
"FindFirstFileW %ls failed\n", sSearch.GetString());
1399 sFileName += wfd.cFileName;
1403 if (!
wcscmp(wfd.cFileName,
L".") || !
wcscmp(wfd.cFileName,
L".."))
1416 FileSize.
u.HighPart = wfd.nFileSizeHigh;
1420 ERR(
"GetPhysicalFileSize failed for %ls\n", sFileName.GetString());
1437 WCHAR wszFormat[100];
1459 WCHAR wszFormat[100];
LSTATUS WINAPI RegGetValueW(HKEY hKey, LPCWSTR pszSubKey, LPCWSTR pszValue, DWORD dwFlags, LPDWORD pdwType, PVOID pvData, LPDWORD pcbData)
virtual HRESULT WINAPI ReplacePage(UINT uPageID, LPFNADDPROPSHEETPAGE pfnReplacePage, LPARAM lParam)
BOOL WINAPI SetFileAttributesW(LPCWSTR lpFileName, DWORD dwFileAttributes)
BOOL WINAPI FindNextFileW(IN HANDLE hFindFile, OUT LPWIN32_FIND_DATAW lpFindFileData)
BOOL WINAPI PathIsDirectoryW(LPCWSTR lpszPath)
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
LPWSTR WINAPI StrFormatByteSizeW(LONGLONG llBytes, LPWSTR lpszDest, UINT cchMax)
#define IDC_FOLDERCUST_CHOOSE_PIC
STRSAFEAPI StringCchCopyNW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc, size_t cchToCopy)
UINT WINAPI GetDlgItemTextW(HWND hDlg, int nIDDlgItem, LPWSTR lpString, int nMaxCount)
CFileVersionInfo m_VerInfo
BOOL Load(LPCWSTR pwszPath)
INT WINAPI GetPrivateProfileStringW(LPCWSTR section, LPCWSTR entry, LPCWSTR def_val, LPWSTR buffer, UINT len, LPCWSTR filename)
UINT SH_FormatByteSize(LONGLONG cbSize, LPWSTR pwszResult, UINT cchResultMax)
DWORD WINAPI VerLanguageNameW(DWORD wLang, LPWSTR szLang, DWORD nSize)
int WINAPI MapWindowPoints(_In_opt_ HWND hWndFrom, _In_opt_ HWND hWndTo, _Inout_updates_(cPoints) LPPOINT lpPoints, _In_ UINT cPoints)
VOID InitOpensWithField(HWND hwndDlg)
#define OBJ_CASE_INSENSITIVE
BOOL WINAPI IsWindow(_In_opt_ HWND)
void UpdateFolderIcon(HWND hwndDlg)
static const WCHAR s_szIconResource[]
void WINAPI ReleaseStgMedium(STGMEDIUM *pmedium)
struct _PSHNOTIFY * LPPSHNOTIFY
BOOL AddVersionString(HWND hwndDlg, LPCWSTR pwszName)
BOOL WINAPI DestroyIcon(_In_ HICON)
#define IDS_EXE_DESCRIPTION
#define FILE_ATTRIBUTE_SYSTEM
#define LOCALE_USER_DEFAULT
NTSYSAPI NTSTATUS NTAPI NtQueryInformationFile(IN HANDLE hFile, OUT PIO_STATUS_BLOCK pIoStatusBlock, OUT PVOID FileInformationBuffer, IN ULONG FileInformationBufferLength, IN FILE_INFORMATION_CLASS FileInfoClass)
OPEN_AS_INFO_FLAGS oaifInFlags
virtual HRESULT WINAPI GetSite(REFIID iid, void **ppvSite)
DWORD WINAPI GetTickCount(VOID)
#define INVALID_HANDLE_VALUE
HRESULT GetData([in, unique] FORMATETC *pformatetcIn, [out] STGMEDIUM *pmedium)
IN PVOID IN PVOID IN USHORT IN USHORT Size
#define IDC_FOLDERCUST_RESTORE_DEFAULTS
DWORD WINAPI GetLastError(VOID)
#define IDC_FOLDERCUST_ICON
BOOL(CALLBACK * LPFNADDPROPSHEETPAGE)(HPROPSHEETPAGE, LPARAM)
BOOL InitGeneralPage(HWND hwndDlg)
static INT_PTR CALLBACK VersionPageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
#define PathRemoveExtension
#define SendDlgItemMessage
BOOL WINAPI ShowWindow(_In_ HWND, _In_ int)
BOOL InitVersionPage(HWND hwndDlg)
BOOL WINAPI FileTimeToLocalFileTime(IN CONST FILETIME *lpFileTime, OUT LPFILETIME lpLocalFileTime)
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
void OnFolderCustChangeIcon(HWND hwndDlg)
STRSAFEAPI StringCbCatW(STRSAFE_LPWSTR pszDest, size_t cbDest, STRSAFE_LPCWSTR pszSrc)
GLint GLint GLsizei GLsizei GLsizei GLint GLenum format
#define SUBLANG_ENGLISH_US
BOOL WINAPI PathAppendW(LPWSTR lpszPath, LPCWSTR lpszAppend)
BOOL WINAPI SetDlgItemTextW(_In_ HWND, _In_ int, _In_ LPCWSTR)
UINT WINAPI GetPrivateProfileIntW(LPCWSTR section, LPCWSTR entry, INT def_val, LPCWSTR filename)
INT WINAPI GetLocaleInfoW(LCID lcid, LCTYPE lctype, LPWSTR buffer, INT len)
STRSAFEAPI StringCchPrintfExW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPWSTR *ppszDestEnd, size_t *pcchRemaining, STRSAFE_DWORD dwFlags, STRSAFE_LPCWSTR pszFormat,...)
#define IDD_FOLDER_CUSTOMIZE
BOOL InitFileAttr(HWND hwndDlg)
BOOL InitFolderCustomizePage(HWND hwndDlg)
DWORD WINAPI GetFileAttributesW(LPCWSTR lpFileName)
BOOL WINAPI PickIconDlg(HWND hWndOwner, LPWSTR lpstrFile, UINT nMaxFile, INT *lpdwIconIndex)
UINT WINAPI ExtractIconExW(LPCWSTR lpszFile, INT nIconIndex, HICON *phiconLarge, HICON *phiconSmall, UINT nIcons)
STRSAFEAPI StringCchCopyW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc)
struct _PSP * HPROPSHEETPAGE
BOOL WINAPI MoveFileW(IN LPCWSTR lpExistingFileName, IN LPCWSTR lpNewFileName)
virtual HRESULT WINAPI GetCommandString(UINT_PTR idCmd, UINT uType, UINT *pwReserved, LPSTR pszName, UINT cchMax)
void OnFolderCustDestroy(HWND hwndDlg)
BOOL OnFolderCustApply(HWND hwndDlg)
#define PSNRET_INVALID_NOCHANGEPAGE
struct _PROPSHEETPAGEW PROPSHEETPAGEW
struct _PROPSHEETPAGEW * LPPROPSHEETPAGEW
STRSAFEAPI StringCbPrintfW(STRSAFE_LPWSTR pszDest, size_t cbDest, STRSAFE_LPCWSTR pszFormat,...)
LPWSTR WINAPI PathFindFileNameW(LPCWSTR lpszPath)
BOOL WINAPI PathFileExistsW(LPCWSTR lpszPath)
#define IDC_FOLDERCUST_CHECKBOX
LPWSTR WINAPI PathFindExtensionW(LPCWSTR lpszPath)
virtual HRESULT WINAPI AddPages(LPFNADDPROPSHEETPAGE pfnAddPage, LPARAM lParam)
#define FILE_ATTRIBUTE_DIRECTORY
HPROPSHEETPAGE WINAPI CreatePropertySheetPageW(LPCPROPSHEETPAGEW lpPropSheetPage)
virtual HRESULT WINAPI SetSite(IUnknown *punk)
UINT SH_FormatInteger(LONGLONG Num, LPWSTR pwszResult, UINT cchResultMax)
NTSYSAPI NTSTATUS NTAPI NtOpenFile(OUT PHANDLE phFile, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes, OUT PIO_STATUS_BLOCK pIoStatusBlock, IN ULONG ShareMode, IN ULONG OpenMode)
static INT_PTR CALLBACK GeneralPageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
BOOL WINAPI FileTimeToSystemTime(IN CONST FILETIME *lpFileTime, OUT LPSYSTEMTIME lpSystemTime)
static INT_PTR CALLBACK FolderCustomizePageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
static const WCHAR s_szIconIndex[]
HWND WINAPI GetDlgItem(_In_opt_ HWND, _In_ int)
DWORD_PTR WINAPI SHGetFileInfoW(LPCWSTR path, DWORD dwFileAttributes, SHFILEINFOW *psfi, UINT sizeofpsfi, UINT flags)
#define NT_SUCCESS(StatCode)
#define PropSheet_Changed(d, w)
_In_ WDFCOLLECTION _In_ ULONG Index
BOOL InitFileType(HWND hwndDlg)
BOOL SetVersionLabel(HWND hwndDlg, DWORD idCtrl, LPCWSTR pwszName)
#define FAILED_UNEXPECTEDLY(hr)
#define FILE_ATTRIBUTE_READONLY
#define IDC_FOLDERCUST_COMBOBOX
int WINAPI GetSystemMetrics(_In_ int)
NTSYSAPI VOID NTAPI RtlFreeUnicodeString(PUNICODE_STRING UnicodeString)
#define PropSheet_QuerySiblings(d, w, l)
LRESULT WINAPI SendDlgItemMessageW(_In_ HWND, _In_ int, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
unsigned __int3264 UINT_PTR
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
NTSTATUS NTAPI NtClose(IN HANDLE Handle)
virtual HRESULT WINAPI QueryContextMenu(HMENU hmenu, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast, UINT uFlags)
#define FILE_READ_ATTRIBUTES
#define FILE_ATTRIBUTE_ARCHIVE
ULARGE_INTEGER m_DirSizeOnDisc
BOOL GetPhysicalFileSize(LPCWSTR PathBuffer, PULARGE_INTEGER Size)
#define IDD_FOLDER_PROPERTIES
DWORD WINAPI GetFileVersionInfoSizeW(LPCWSTR filename, LPDWORD handle)
BOOL InitFilePath(HWND hwndDlg)
LPCWSTR GetString(LPCWSTR pwszName)
_Must_inspect_result_ _Out_ PLARGE_INTEGER FileSize
WCHAR m_szFolderIconPath[MAX_PATH]
VS_FIXEDFILEINFO * GetFixedInfo()
int _cdecl swprintf(const WCHAR *,...)
LPWSTR WINAPI PathRemoveBackslashW(LPWSTR lpszPath)
BOOL WINAPI WritePrivateProfileStringW(LPCWSTR section, LPCWSTR entry, LPCWSTR string, LPCWSTR filename)
STRSAFEAPI StringCchCopyExW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc, STRSAFE_LPWSTR *ppszDestEnd, size_t *pcchRemaining, STRSAFE_DWORD dwFlags)
virtual HRESULT WINAPI InvokeCommand(LPCMINVOKECOMMANDINFO lpici)
INT_PTR(CALLBACK * DLGPROC)(HWND, UINT, WPARAM, LPARAM)
BOOL WINAPI EnableWindow(_In_ HWND, _In_ BOOL)
int WINAPI PathParseIconLocationW(LPWSTR lpszPath)
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
_Check_return_ _CRTIMP int __cdecl wcscmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
HWND WINAPI GetParent(_In_ HWND)
_Must_inspect_result_ _In_opt_ PFLT_INSTANCE _Out_ PHANDLE FileHandle
struct _FileName FileName
#define IDD_FILE_PROPERTIES
#define shell32_hInstance
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
void shell(int argc, const char *argv[])
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
STRSAFEAPI StringCchPrintfW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszFormat,...)
WINE_DEFAULT_DEBUG_CHANNEL(shell)
static OUT PIO_STATUS_BLOCK IoStatusBlock
#define IDC_FOLDERCUST_CHANGE_ICON
VOID WINAPI PathUnquoteSpacesW(LPWSTR lpszPath)
#define FILE_ATTRIBUTE_HIDDEN
WCHAR m_wszPath[MAX_PATH]
DWORD WINAPI ExpandEnvironmentStringsW(IN LPCWSTR lpSrc, IN LPWSTR lpDst, IN DWORD nSize)
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
BOOL WINAPI GetFileVersionInfoW(LPCWSTR filename, DWORD handle, DWORD datasize, LPVOID data)
#define FileStandardInformation
#define PSM_QUERYSIBLINGS
#define FILE_SYNCHRONOUS_IO_NONALERT
static DWORD WINAPI _CountFolderAndFilesThreadProc(LPVOID lpParameter)
virtual HRESULT STDMETHODCALLTYPE Initialize(PCIDLIST_ABSOLUTE pidlFolder, IDataObject *pdtobj, HKEY hkeyProgID)
HICON WINAPI LoadIconW(_In_opt_ HINSTANCE, _In_ LPCWSTR)
#define InitializeObjectAttributes(p, n, a, r, s)
struct _LARGE_INTEGER::@2247 u
static BOOL GetFileTimeString(LPFILETIME lpFileTime, LPWSTR pwszResult, UINT cchResult)
BOOL WINAPI GetWindowRect(_In_ HWND, _Out_ LPRECT)
BOOL WINAPI SetWindowPos(_In_ HWND, _In_opt_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ UINT)
BOOL WINAPI GetFileAttributesExW(LPCWSTR lpFileName, GET_FILEEX_INFO_LEVELS fInfoLevelId, LPVOID lpFileInformation)
#define HKEY_CLASSES_ROOT
#define MAKEINTRESOURCEW(i)
HPROPSHEETPAGE SH_CreatePropertySheetPage(WORD wDialogId, DLGPROC pfnDlgProc, LPARAM lParam, LPCWSTR pwszTitle)
STRSAFEAPI StringCbCopyW(STRSAFE_LPWSTR pszDest, size_t cbDest, STRSAFE_LPCWSTR pszSrc)
BOOL WINAPI SHCreateThread(LPTHREAD_START_ROUTINE pfnThreadProc, VOID *pData, DWORD dwFlags, LPTHREAD_START_ROUTINE pfnCallback)
static const CLSID *static CLSID *static const GUID VARIANT VARIANT *static IServiceProvider DWORD *static HMENU
UINT WINAPI DragQueryFileW(HDROP hDrop, UINT lFile, LPWSTR lpszwFile, UINT lLength)
BOOL CountFolderAndFiles(HWND hwndDlg, LPCWSTR pwszBuf, LPDWORD ticks)
static const WCHAR s_szIconFile[]
#define HeapFree(x, y, z)
#define PathSearchAndQualify
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
LPWSTR SH_FormatFileSizeWithBytes(const PULARGE_INTEGER lpQwSize, LPWSTR pwszResult, UINT cchResultMax)
NTSYSAPI BOOLEAN NTAPI RtlDosPathNameToNtPathName_U(_In_opt_z_ PCWSTR DosPathName, _Out_ PUNICODE_STRING NtPathName, _Out_opt_ PCWSTR *NtFileNamePart, _Out_opt_ PRTL_RELATIVE_NAME_U DirectoryInfo)
HANDLE WINAPI FindFirstFileW(IN LPCWSTR lpFileName, OUT LPWIN32_FIND_DATAW lpFindFileData)
EXTERN_C BOOL PathIsExeW(LPCWSTR lpszPath)
BOOL WINAPI VerQueryValueW(LPCVOID pBlock, LPCWSTR lpSubBlock, LPVOID *lplpBuffer, PUINT puLen)
static const WCHAR s_szShellClassInfo[]
BOOL WINAPI FindClose(HANDLE hFindFile)