60 { CLSID_ControlPanel, 0, 0x50 },
67 L"::{20D04FE0-3AEA-1069-A2D8-08002B30309D}",
73 if (pidl && pidl->mkid.cb == 2 + 2 +
sizeof(
CLSID))
76 return (
const CLSID*)(&pidl->mkid.abID[2]);
86 ERR(
"pidl %p is not a drive\n", pidl);
89 return ::GetDriveTypeW(szDrive);
107#define RETRY_SLEEP 250
110 DWORD dwError, dwBytesReturned;
160 0, &dwBytesReturned,
NULL);
198 return stub.DestroyWindow();
226 WCHAR szDrive[8] = {0};
229 ERR(
"pidl is not a drive\n");
239#define CMDID_FORMAT 0
241#define CMDID_DISCONNECT 2
245#define CMDID_FORMAT 1
247#define CMDID_DISCONNECT 3
288 WCHAR wszBuf[4] =
L"A:\\";
289 wszBuf[0] = (
WCHAR)szDrive[0];
340 WCHAR szFormat[128], szMessage[128];
388 wszAutoRunInfPath) && wszValue[0] != 0)
424 wszAutoRunInfPath) && wszTemp[0] != 0)
437 CComPtr<IDefaultExtractIconInit> initIcon;
448 int icon_idx, reg_idx;
482 initIcon->SetNormalIcon(wTemp, icon_idx);
484 else if (HLM_GetIconW(reg_idx - 1, wTemp,
_countof(wTemp), &icon_idx))
486 initIcon->SetNormalIcon(wTemp, icon_idx);
491 initIcon->SetNormalIcon(wTemp, icon_idx);
506 return initIcon->QueryInterface(
riid, ppvOut);
518 WCHAR wszDriveName[] = {
'A',
':',
'\\',
'\0'};
521 while (wszDriveName[0] <=
'Z')
523 if(dwDrivemap & 0x00000001L)
526 dwDrivemap = dwDrivemap >> 1;
554 SFGAO_CANRENAME | SFGAO_CANDELETE | SFGAO_HASPROPSHEET | SFGAO_DROPTARGET |
555 SFGAO_FILESYSANCESTOR | SFGAO_FOLDER | SFGAO_HASSUBFOLDER;
557 SFGAO_HASSUBFOLDER | SFGAO_FOLDER | SFGAO_CANLINK;
559 SFGAO_HASSUBFOLDER | SFGAO_FILESYSTEM | SFGAO_FOLDER | SFGAO_FILESYSANCESTOR |
560 SFGAO_DROPTARGET | SFGAO_HASPROPSHEET | SFGAO_CANRENAME | SFGAO_CANLINK | SFGAO_CANCOPY;
569 TRACE(
"-- destroying IShellFolder(%p)\n",
this);
595 TRACE(
"(%p)->(HWND=%p,%p,%p=%s,%p,pidl=%p,%p)\n",
this,
596 hwndOwner, pbc, lpszDisplayName,
debugstr_w (lpszDisplayName),
597 pchEaten, ppidl, pdwAttributes);
604 if (!lpszDisplayName)
608 if (lpszDisplayName[0] ==
L':' && lpszDisplayName[1] ==
L':')
610 return m_regFolder->ParseDisplayName(hwndOwner, pbc, lpszDisplayName, pchEaten, ppidl,
614 if (((
L'A' <= lpszDisplayName[0] && lpszDisplayName[0] <=
L'Z') ||
615 (
L'a' <= lpszDisplayName[0] && lpszDisplayName[0] <=
L'z')) &&
616 lpszDisplayName[1] ==
L':' && (lpszDisplayName[2] ==
L'\\' || !lpszDisplayName[2]))
632 if (lpszDisplayName[2] && lpszDisplayName[3])
634 CComPtr<IShellFolder> pChildFolder;
640 CComHeapPtr<ITEMIDLIST> pidlChild;
641 hr = pChildFolder->ParseDisplayName(hwndOwner, pbc, &lpszDisplayName[3], &chEaten,
642 &pidlChild, pdwAttributes);
646 hr = SHILCombine(pidlTemp, pidlChild, ppidl);
650 *ppidl = pidlTemp.Detach();
651 if (pdwAttributes && *pdwAttributes)
657 TRACE(
"(%p)->(-- ret=0x%08x)\n",
this,
hr);
667 CComPtr<IEnumIDList> pRegEnumerator;
678 TRACE(
"(%p)->(pidl=%p,%p,%s,%p)\n",
this,
689 PERSIST_FOLDER_TARGET_INFO pfti = {0};
690 pfti.dwAttributes = -1;
692 pfti.szTargetParsingName[0] = *pchDrive;
693 pfti.szTargetParsingName[1] =
L':';
694 pfti.szTargetParsingName[2] =
L'\\';
699 &CLSID_ShellFSFolder,
713 FIXME(
"(%p)->(pidl=%p,%p,%s,%p) stub\n",
this,
728 if (!pidl1 || !pidl2)
730 ERR(
"Got null pidl pointer (%Ix %p %p)!\n",
lParam, pidl1, pidl2);
761 ULARGE_INTEGER Drive1Available, Drive1Total, Drive2Available, Drive2Total;
799 CComPtr<IShellView> pShellView;
802 TRACE(
"(%p)->(hwnd=%p,%s,%p)\n",
this,
812 WARN(
"IDropTarget not implemented\n");
825 TRACE(
"-- (%p)->(interface=%p)\n",
this, ppvOut);
834 TRACE(
"(%p)->(cidl=%d apidl=%p mask=%p (0x%08x))\n",
835 this, cidl, apidl, rgfInOut, rgfInOut ? *rgfInOut : 0);
848 for (
UINT i = 0;
i < cidl; ++
i)
855 *rgfInOut &= ~SFGAO_CANRENAME;
867 ERR(
"Got unknown pidl type!\n");
873 *rgfInOut &= ~SFGAO_VALIDATE;
875 TRACE(
"-- result=0x%08x\n", *rgfInOut);
898 TRACE(
"(%p)->(%p,%u,apidl=%p,%s,%p,%p)\n",
this,
927 CComPtr<IShellFolder> psfChild;
932 return psfChild->CreateViewObject(
NULL,
riid, ppvOut);
941 TRACE(
"(%p)->hr=0x%08x\n",
this,
hr);
953 TRACE(
"(%p)->(pidl=%p,0x%08x,%p)\n",
this, pidl,
dwFlags, strRet);
969 ERR(
"Wrong pidl type\n");
983 WCHAR wszDrive[18] = {0};
990 DWORD dwVolumeSerialNumber, dwMaximumComponentLength, dwFileSystemFlags;
994 &dwVolumeSerialNumber,
995 &dwMaximumComponentLength, &dwFileSystemFlags,
NULL, 0);
1021 if (dwFileSystemFlags >
MAX_PATH - 7)
1027 wszDrive[2] =
L'\0';
1028 wcscat(pszPath, wszDrive);
1075 FIXME(
"(%p)\n",
this);
1081 FIXME(
"(%p)\n",
this);
1087 TRACE(
"(%p)\n",
this);
1098 TRACE(
"(%p)\n",
this);
1108 FIXME(
"(%p)\n",
this);
1116 TRACE(
"(%p)->(%p %i %p)\n",
this, pidl, iColumn, psd);
1133 return m_regFolder->GetDetailsOf(pidl, iColumn, psd);
1136 return SHSetStrRet(&psd->
str,
"");
1176 hr = SHSetStrRet(&psd->
str,
"");
1187 FIXME(
"(%p)\n",
this);
1196 TRACE(
"(%p)\n",
this);
1201 *lpClassId = CLSID_MyComputer;
1220 TRACE(
"(%p)->(%p)\n",
this, pidl);
static const REGFOLDERINFO g_RegFolderInfo
HRESULT WINAPI SHCreateShellFolderView(const SFV_CREATE *pcsfv, IShellView **ppsv)
static const CLSID * IsRegItem(PCUITEMID_CHILD pidl)
BOOL SHELL32_IsShellFolderNamespaceItemHidden(LPCWSTR SubKey, REFCLSID Clsid)
static HRESULT getIconLocationForDrive(IShellFolder *psf, PCITEMID_CHILD pidl, UINT uFlags, LPWSTR szIconFile, UINT cchMax, int *piIndex, UINT *pwFlags)
BOOL _ILGetDriveType(LPCITEMIDLIST pidl)
static HRESULT DoFormatDriveAsync(HWND hwnd, UINT nDrive)
HRESULT CDrivesContextMenu_CreateInstance(PCIDLIST_ABSOLUTE pidlFolder, HWND hwnd, UINT cidl, PCUITEMID_CHILD_ARRAY apidl, IShellFolder *psf, IContextMenu **ppcm)
static const CLSID * IsRegItem(PCUITEMID_CHILD pidl)
static BOOL TryToLockOrUnlockDrive(HANDLE hDrive, BOOL bLock)
HRESULT CALLBACK DrivesContextMenuCallback(IShellFolder *psf, HWND hwnd, IDataObject *pdtobj, UINT uMsg, WPARAM wParam, LPARAM lParam)
static BOOL DoEjectDrive(const WCHAR *physical, UINT nDriveType, INT *pnStringID)
static const DWORD dwComputerAttributes
BOOL SHELL32_IsShellFolderNamespaceItemHidden(LPCWSTR SubKey, REFCLSID Clsid)
static const REGFOLDERINFO g_RegFolderInfo
static HRESULT getLabelForDrive(LPWSTR wszPath, LPWSTR wszLabel)
static int iDriveIconIds[7]
static const shvheader MyComputerSFHeader[]
static int iDriveTypeIds[7]
BOOL IsDriveFloppyA(LPCSTR pszDriveRoot)
static const REQUIREDREGITEM g_RequiredItems[]
static const DWORD dwDriveAttributes
static const DWORD dwControlPanelAttributes
static DWORD CALLBACK DoFormatDriveThread(LPVOID args)
HRESULT CDrivesExtractIcon_CreateInstance(IShellFolder *psf, LPCITEMIDLIST pidl, REFIID riid, LPVOID *ppvOut)
HRESULT IDataObject_Constructor(HWND hwndOwner, PCIDLIST_ABSOLUTE pMyPidl, PCUIDLIST_RELATIVE_ARRAY apidl, UINT cidl, BOOL bExtendedObject, IDataObject **dataObject)
HRESULT CRegFolder_CreateInstance(PREGFOLDERINITDATA pInit, LPCITEMIDLIST pidlRoot, REFIID riid, void **ppv)
#define shell32_hInstance
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
void shell(int argc, const char *argv[])
EXTERN_C void WINAPI SHChangeNotify(LONG wEventId, UINT uFlags, LPCVOID dwItem1, LPCVOID dwItem2)
HRESULT WINAPI Initialize(HWND hwndOwner, DWORD dwFlags, IEnumIDList *pRegEnumerator)
STDMETHOD() GetUIObjectOf(HWND hwndOwner, UINT cidl, PCUITEMID_CHILD_ARRAY apidl, REFIID riid, UINT *prgfInOut, LPVOID *ppvOut) override
STDMETHOD() GetCurFolder(PIDLIST_ABSOLUTE *pidl) override
STDMETHOD() GetAttributesOf(UINT cidl, PCUITEMID_CHILD_ARRAY apidl, DWORD *rgfInOut) override
STDMETHOD() GetDisplayNameOf(PCUITEMID_CHILD pidl, DWORD dwFlags, LPSTRRET strRet) override
STDMETHOD() Initialize(PCIDLIST_ABSOLUTE pidl) override
STDMETHOD() EnumObjects(HWND hwndOwner, DWORD dwFlags, LPENUMIDLIST *ppEnumIDList) override
STDMETHOD() GetDetailsOf(PCUITEMID_CHILD pidl, UINT iColumn, SHELLDETAILS *psd) override
STDMETHOD() BindToStorage(PCUIDLIST_RELATIVE pidl, LPBC pbcReserved, REFIID riid, LPVOID *ppvOut) override
STDMETHOD() GetDefaultSearchGUID(GUID *pguid) override
STDMETHOD() CallBack(IShellFolder *psf, HWND hwndOwner, IDataObject *pdtobj, UINT uMsg, WPARAM wParam, LPARAM lParam) override
STDMETHOD() ParseDisplayName(HWND hwndOwner, LPBC pbc, LPOLESTR lpszDisplayName, DWORD *pchEaten, PIDLIST_RELATIVE *ppidl, DWORD *pdwAttributes) override
STDMETHOD() ShouldShow(IShellFolder *psf, PCIDLIST_ABSOLUTE pidlFolder, PCUITEMID_CHILD pidlItem) override
STDMETHOD() GetDefaultColumnState(UINT iColumn, DWORD *pcsFlags) override
STDMETHOD() GetDetailsEx(PCUITEMID_CHILD pidl, const SHCOLUMNID *pscid, VARIANT *pv) override
STDMETHOD() GetDefaultColumn(DWORD dwRes, ULONG *pSort, ULONG *pDisplay) override
STDMETHOD() MapColumnToSCID(UINT column, SHCOLUMNID *pscid) override
CComPtr< IShellFolder2 > m_regFolder
STDMETHOD() CreateViewObject(HWND hwndOwner, REFIID riid, LPVOID *ppvOut) override
STDMETHOD() CompareIDs(LPARAM lParam, PCUIDLIST_RELATIVE pidl1, PCUIDLIST_RELATIVE pidl2) override
HRESULT WINAPI FinalConstruct()
STDMETHOD() SetNameOf(HWND hwndOwner, PCUITEMID_CHILD pidl, LPCOLESTR lpName, DWORD dwFlags, PITEMID_CHILD *pPidlOut) override
STDMETHOD() BindToObject(PCUIDLIST_RELATIVE pidl, LPBC pbcReserved, REFIID riid, LPVOID *ppvOut) override
STDMETHOD() GetClassID(CLSID *lpClassId) override
STDMETHOD() EnumSearches(IEnumExtraSearch **ppenum) override
BOOL AddToEnumList(LPITEMIDLIST pidl)
HRESULT AppendItemsFromEnumerator(IEnumIDList *pEnum)
#define ERROR_INVALID_FUNCTION
void pdump(LPCITEMIDLIST pidl)
const char * shdebugstr_guid(const struct _GUID *id)
BOOL WINAPI DeviceIoControl(IN HANDLE hDevice, IN DWORD dwIoControlCode, IN LPVOID lpInBuffer OPTIONAL, IN DWORD nInBufferSize OPTIONAL, OUT LPVOID lpOutBuffer OPTIONAL, IN DWORD nOutBufferSize OPTIONAL, OUT LPDWORD lpBytesReturned OPTIONAL, IN LPOVERLAPPED lpOverlapped OPTIONAL)
#define IDS_SHV_COLUMN_TYPE
#define IDS_SHV_COLUMN_NAME
#define DFM_MERGECONTEXTMENU
#define DFM_INVOKECOMMAND
LSTATUS WINAPI RegGetValueW(HKEY hKey, LPCWSTR pszSubKey, LPCWSTR pszValue, DWORD dwFlags, LPDWORD pdwType, PVOID pvData, LPDWORD pcbData)
BOOL WINAPI _ILIsPidlSimple(LPCITEMIDLIST pidl)
#define INVALID_HANDLE_VALUE
#define FAILED_UNEXPECTEDLY(hr)
DWORD WINAPI ExpandEnvironmentStringsW(IN LPCWSTR lpSrc, IN LPWSTR lpDst, IN DWORD nSize)
UINT WINAPI GetDriveTypeA(IN LPCSTR lpRootPathName)
UINT WINAPI GetDriveTypeW(IN LPCWSTR lpRootPathName)
BOOL WINAPI GetDiskFreeSpaceExA(IN LPCSTR lpDirectoryName OPTIONAL, OUT PULARGE_INTEGER lpFreeBytesAvailableToCaller, OUT PULARGE_INTEGER lpTotalNumberOfBytes, OUT PULARGE_INTEGER lpTotalNumberOfFreeBytes)
BOOL WINAPI GetVolumeInformationW(IN LPCWSTR lpRootPathName, IN LPWSTR lpVolumeNameBuffer, IN DWORD nVolumeNameSize, OUT LPDWORD lpVolumeSerialNumber OPTIONAL, OUT LPDWORD lpMaximumComponentLength OPTIONAL, OUT LPDWORD lpFileSystemFlags OPTIONAL, OUT LPWSTR lpFileSystemNameBuffer OPTIONAL, IN DWORD nFileSystemNameSize)
BOOL WINAPI GetVolumeInformationA(IN LPCSTR lpRootPathName, IN LPSTR lpVolumeNameBuffer, IN DWORD nVolumeNameSize, OUT LPDWORD lpVolumeSerialNumber OPTIONAL, OUT LPDWORD lpMaximumComponentLength OPTIONAL, OUT LPDWORD lpFileSystemFlags OPTIONAL, OUT LPSTR lpFileSystemNameBuffer OPTIONAL, IN DWORD nFileSystemNameSize)
BOOL WINAPI SetVolumeLabelW(IN LPCWSTR lpRootPathName, IN LPCWSTR lpVolumeName OPTIONAL)
DWORD WINAPI GetFullPathNameW(IN LPCWSTR lpFileName, IN DWORD nBufferLength, OUT LPWSTR lpBuffer, OUT LPWSTR *lpFilePart)
INT WINAPI GetPrivateProfileStringW(LPCWSTR section, LPCWSTR entry, LPCWSTR def_val, LPWSTR buffer, UINT len, LPCWSTR filename)
DWORD WINAPI SHFormatDrive(HWND hwnd, UINT drive, UINT fmtID, UINT options)
#define SHELL_ExecuteControlPanelCPL(hwnd, cpl)
DWORD BindCtx_GetMode(_In_ IBindCtx *pbc, _In_ DWORD dwDefault)
HRESULT SHIsFileSysBindCtx(_In_ IBindCtx *pBindCtx, _Out_opt_ WIN32_FIND_DATAW *pFindData)
HRESULT SHELL32_DefaultContextMenuCallBack(IShellFolder *psf, IDataObject *pdo, UINT msg)
void WINAPI SHFree(LPVOID pv)
LPWSTR WINAPI PathBuildRootW(LPWSTR lpszPath, int drive)
BOOL WINAPI PathIsDirectoryW(LPCWSTR lpszPath)
int WINAPI PathParseIconLocationW(LPWSTR lpszPath)
BOOL WINAPI PathIsRelativeW(LPCWSTR lpszPath)
LPSTR WINAPI StrFormatByteSize64A(LONGLONG llBytes, LPSTR lpszDest, UINT cchMax)
BOOL WINAPI SHCreateThread(LPTHREAD_START_ROUTINE pfnThreadProc, VOID *pData, DWORD dwFlags, LPTHREAD_START_ROUTINE pfnCallback)
BOOL IsDriveFloppyA(LPCSTR pszDriveRoot)
WCHAR swShell32Name[MAX_PATH]
#define FILE_READ_ONLY_VOLUME
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
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 WINAPI CoTaskMemFree(LPVOID ptr)
LPVOID WINAPI CoTaskMemAlloc(SIZE_T size)
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
HRESULT SHELL32_ShowFilesystemItemPropertiesDialogAsync(IDataObject *pDO)
#define COM_INTERFACE_ENTRY_IID(iid, x)
static const CLSID *static CLSID *static const GUID VARIANT VARIANT *static IServiceProvider DWORD *static HMENU
#define FSCTL_LOCK_VOLUME
#define FSCTL_UNLOCK_VOLUME
#define FSCTL_DISMOUNT_VOLUME
#define DEFAULT_UNREACHABLE
#define IOCTL_STORAGE_EJECT_MEDIA
#define IOCTL_STORAGE_MEDIA_REMOVAL
interface IBindCtx * LPBC
const GUID IID_IDataObject
LPITEMIDLIST _ILCreateMyComputer(void)
LPITEMIDLIST WINAPI ILClone(LPCITEMIDLIST pidl)
LPITEMIDLIST _ILCreateDrive(LPCWSTR lpszNew)
LPPIDLDATA _ILGetDataPointer(LPCITEMIDLIST pidl)
BOOL _ILIsSpecialFolder(LPCITEMIDLIST pidl)
DWORD _ILGetDrive(LPCITEMIDLIST pidl, LPWSTR pOut, UINT uSize)
void _ILFreeaPidl(LPITEMIDLIST *apidl, UINT cidl)
BOOL ILGetDisplayNameExW(LPSHELLFOLDER psf, LPCITEMIDLIST pidl, LPWSTR path, DWORD type)
BOOL _ILIsControlPanel(LPCITEMIDLIST pidl)
BOOL _ILIsDrive(LPCITEMIDLIST pidl)
DWORD _ILSimpleGetTextW(LPCITEMIDLIST pidl, LPWSTR szOut, UINT uOutSize)
static const WCHAR szName[]
#define IsEqualIID(riid1, riid2)
#define REGSTR_PATH_EXPLORER
BOOL HCR_GetIconW(LPCWSTR szClass, LPWSTR szDest, LPCWSTR szName, DWORD len, int *picon_idx)
#define MAKE_COMPARE_HRESULT(x)
HRESULT SHELL32_BindToSF(LPCITEMIDLIST pidlRoot, PERSIST_FOLDER_TARGET_INFO *ppfti, LPCITEMIDLIST pidl, const GUID *clsid, REFIID riid, LPVOID *ppvOut)
HRESULT SHELL32_GetDisplayNameOfChild(IShellFolder2 *psf, LPCITEMIDLIST pidl, DWORD dwFlags, LPSTRRET strRet)
HRESULT SHELL32_CompareChildren(IShellFolder2 *psf, LPARAM lParam, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
static __inline int SHELL32_GUIDToStringW(REFGUID guid, LPWSTR str)
LSTATUS AddClassKeyToArray(const WCHAR *szClass, HKEY *array, UINT *cKeys)
HRESULT SHELL32_CompareDetails(IShellFolder2 *isf, LPARAM lParam, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
HRESULT SH_GetApidlFromDataObject(IDataObject *pDataObject, PIDLIST_ABSOLUTE *ppidlfolder, PUITEMID_CHILD **apidlItems, UINT *pcidl)
void WINAPI _InsertMenuItemW(HMENU hmenu, UINT indexMenu, BOOL fByPosition, UINT wID, UINT fType, LPCWSTR dwTypeData, UINT fState)
#define SHCNE_DRIVEREMOVED
#define SHCNE_MEDIAREMOVED
struct _SFV_CREATE SFV_CREATE
#define DFM_CMD_PROPERTIES
#define SHCNF_FLUSHNOWAIT
#define IDS_CANTDISMOUNTVOLUME
#define IDS_DRIVE_NETWORK
#define IDS_DRIVE_REMOVABLE
#define IDI_SHELL_3_14_FLOPPY
#define IDI_SHELL_NETDRIVE
#define IDS_CANTLOCKVOLUME
#define IDS_SHV_COLUMN_DISK_AVAILABLE
#define IDI_SHELL_DOCUMENT
#define IDS_CANTEJECTMEDIA
#define IDI_SHELL_RAMDISK
#define IDS_CANTDISCONNECT
#define IDI_SHELL_REMOVEABLE
#define IDS_SHV_COLUMN_DISK_CAPACITY
#define IDS_SHV_COLUMN_COMMENTS
ITEMID_CHILD UNALIGNED * PUITEMID_CHILD
const PCUITEMID_CHILD * PCUITEMID_CHILD_ARRAY
const ITEMID_CHILD UNALIGNED * PCUITEMID_CHILD
const ITEMIDLIST_RELATIVE UNALIGNED * PCUIDLIST_RELATIVE
const ITEMIDLIST UNALIGNED * LPCITEMIDLIST
STRSAFEAPI StringCchCopyW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc)
struct tagDriveStruct drive
union tagPIDLDATA::@562 u
VOID WINAPI DECLSPEC_HOTPATCH Sleep(IN DWORD dwMilliseconds)
#define DRIVE_NO_ROOT_DIR
DWORD WINAPI GetLastError(void)
DWORD WINAPI GetLogicalDrives(void)
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
#define ERROR_PATH_NOT_FOUND
#define HRESULT_FROM_WIN32(x)
#define HKEY_CURRENT_USER
HMENU WINAPI CreatePopupMenu(void)
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
int WINAPIV wsprintfW(_Out_ LPWSTR, _In_ _Printf_format_string_ LPCWSTR,...)
int WINAPI MessageBoxW(_In_opt_ HWND hWnd, _In_opt_ LPCWSTR lpText, _In_opt_ LPCWSTR lpCaption, _In_ UINT uType)
BOOL WINAPI DestroyMenu(_In_ HMENU)
#define MAKEINTRESOURCEW(i)
DWORD WINAPI WNetCancelConnection2W(LPCWSTR lpName, DWORD dwFlags, BOOL fForce)
#define IID_PPV_ARG(Itype, ppType)