Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

520 lines
24 KiB

#include <shlobj.h> // ;Internal
#include <shellapi.h> // ;Internal
/* ;Internal */
#ifndef _SHSEMIP_H_
#define _SHSEMIP_H_
//
// Define API decoration for direct importing of DLL references.
//
#ifndef WINSHELLAPI
#if !defined(_SHELL32_)
#define WINSHELLAPI DECLSPEC_IMPORT
#else
#define WINSHELLAPI
#endif
#endif // WINSHELLAPI
#ifndef RC_INVOKED
#pragma pack(1) /* Assume byte packing throughout */
#endif /* !RC_INVOKED */
#ifdef __cplusplus
extern "C" { /* Assume C declarations for C++ */
#endif /* __cplusplus */
#ifndef DONT_WANT_SHELLDEBUG
#ifndef DebugMsg /* ;Internal */
#define DM_TRACE 0x0001 // Trace messages /* ;Internal */
#define DM_WARNING 0x0002 // Warning /* ;Internal */
#define DM_ERROR 0x0004 // Error /* ;Internal */
#define DM_ASSERT 0x0008 // Assertions /* ;Internal */
#define Assert(f) /* ;Internal */
#define AssertE(f) (f) /* ;Internal */
#define AssertMsg 1 ? (void)0 : (void) /* ;Internal */
#define DebugMsg 1 ? (void)0 : (void) /* ;Internal */
#endif /* ;Internal */
/* ;Internal */
#endif
//====== Ranges for WM_NOTIFY codes ==================================
// If a new set of codes is defined, make sure the range goes /* ;Internal */
// here so that we can keep them distinct /* ;Internal */
// Note that these are defined to be unsigned to avoid compiler warnings
// since NMHDR.code is declared as UINT.
//
// NM_FIRST - NM_LAST defined in commctrl.h (0U-0U) - (OU-99U)
//
// LVN_FIRST - LVN_LAST defined in commctrl.h (0U-100U) - (OU-199U)
//
// PSN_FIRST - PSN_LAST defined in prsht.h (0U-200U) - (0U-299U)
//
// HDN_FIRST - HDN_LAST defined in commctrl.h (0U-300U) - (OU-399U)
//
// TVN_FIRST - TVN_LAST defined in commctrl.h (0U-400U) - (OU-499U)
// TTN_FIRST - TTN_LAST defined in commctrl.h (0U-520U) - (OU-549U)
#define RFN_FIRST (0U-510U) // run file dialog notify
#define RFN_LAST (0U-519U)
#define SEN_FIRST (0U-550U) // ;Internal
#define SEN_LAST (0U-559U) // ;Internal
#define MAXPATHLEN MAX_PATH // ;Internal
//===========================================================================
// ITEMIDLIST
//===========================================================================
WINSHELLAPI LPITEMIDLIST WINAPI ILGetNext(LPCITEMIDLIST pidl);
WINSHELLAPI UINT WINAPI ILGetSize(LPCITEMIDLIST pidl);
WINSHELLAPI LPITEMIDLIST WINAPI ILCreate(void);
WINSHELLAPI LPITEMIDLIST WINAPI ILAppendID(LPITEMIDLIST pidl, LPCSHITEMID pmkid, BOOL fAppend);
WINSHELLAPI void WINAPI ILFree(LPITEMIDLIST pidl);
WINSHELLAPI void WINAPI ILGlobalFree(LPITEMIDLIST pidl);
WINSHELLAPI LPITEMIDLIST WINAPI ILCreateFromPath(LPCSTR szPath);
WINSHELLAPI BOOL WINAPI ILGetDisplayName(LPCITEMIDLIST pidl, LPSTR pszName);
WINSHELLAPI LPITEMIDLIST WINAPI ILFindLastID(LPCITEMIDLIST pidl);
WINSHELLAPI BOOL WINAPI ILRemoveLastID(LPITEMIDLIST pidl);
WINSHELLAPI LPITEMIDLIST WINAPI ILClone(LPCITEMIDLIST pidl);
WINSHELLAPI LPITEMIDLIST WINAPI ILCloneFirst(LPCITEMIDLIST pidl);
WINSHELLAPI LPITEMIDLIST WINAPI ILGlobalClone(LPCITEMIDLIST pidl);
WINSHELLAPI BOOL WINAPI ILIsEqual(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2);
WINSHELLAPI BOOL WINAPI ILIsEqualItemID(LPCSHITEMID pmkid1, LPCSHITEMID pmkid2);
WINSHELLAPI BOOL WINAPI ILIsParent(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2, BOOL fImmediate);
WINSHELLAPI LPITEMIDLIST WINAPI ILFindChild(LPCITEMIDLIST pidlParent, LPCITEMIDLIST pidlChild);
WINSHELLAPI LPITEMIDLIST WINAPI ILCombine(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2);
WINSHELLAPI HRESULT WINAPI ILLoadFromStream(LPSTREAM pstm, LPITEMIDLIST *pidl);
WINSHELLAPI HRESULT WINAPI ILSaveToStream(LPSTREAM pstm, LPCITEMIDLIST pidl);
WINSHELLAPI HRESULT WINAPI ILLoadFromFile(HFILE hfile, LPITEMIDLIST *pidl);
WINSHELLAPI HRESULT WINAPI ILSaveToFile(HFILE hfile, LPCITEMIDLIST pidl);
WINSHELLAPI LPITEMIDLIST WINAPI _ILCreate(UINT cbSize);
WINSHELLAPI HRESULT WINAPI SHILCreateFromPath(LPCSTR szPath, LPITEMIDLIST *ppidl, DWORD *rgfInOut);
// helper macros
#define ILIsEmpty(pidl) ((pidl)->mkid.cb==0)
#define IsEqualItemID(pmkid1, pmkid2) (memcmp(pmkid1, pmkid2, (pmkid1)->cb)==0)
#define ILCreateFromID(pmkid) ILAppendID(NULL, pmkid, TRUE)
// unsafe macros
#define _ILSkip(pidl, cb) ((LPITEMIDLIST)(((BYTE*)(pidl))+cb))
#define _ILNext(pidl) _ILSkip(pidl, (pidl)->mkid.cb)
/*
* The SHObjectProperties API provides an easy way to invoke
* the Properties context menu command on shell objects.
*
* PARAMETERS
*
* hwndOwner The window handle of the window which will own the dialog
* dwType A SHOP_ value as defined below
* lpObject Name of the object, see SHOP_ values below
* lpPage The name of the property sheet page to open to or NULL.
*
* RETURN
*
* TRUE if the Properties command was invoked
*/
WINSHELLAPI BOOL WINAPI SHObjectProperties(HWND hwndOwner, DWORD dwType, LPCSTR lpObject, LPCSTR lpPage);
#define SHOP_PRINTERNAME 1 // lpObject points to a printer friendly name
#define SHOP_FILEPATH 2 // lpObject points to a fully qualified path+file name
#define SHOP_TYPEMASK 0x00000003
#define SHOP_MODAL 0x80000000
//====== ShellMessageBox ================================================
// If lpcTitle is NULL, the title is taken from hWnd
// If lpcText is NULL, this is assumed to be an Out Of Memory message
// If the selector of lpcTitle or lpcText is NULL, the offset should be a
// string resource ID
// The variable arguments must all be 32-bit values (even if fewer bits
// are actually used)
// lpcText (or whatever string resource it causes to be loaded) should
// be a formatting string similar to wsprintf except that only the
// following formats are available:
// %% formats to a single '%'
// %nn%s the nn-th arg is a string which is inserted
// %nn%ld the nn-th arg is a DWORD, and formatted decimal
// %nn%lx the nn-th arg is a DWORD, and formatted hex
// note that lengths are allowed on the %s, %ld, and %lx, just
// like wsprintf /* ;Internal */
//
int _cdecl ShellMessageBox(HINSTANCE hAppInst, HWND hWnd, LPCSTR
lpcText, LPCSTR lpcTitle, UINT fuStyle, ...);
//===================================================================
// Smart tiling API's
WINSHELLAPI WORD WINAPI ArrangeWindows(HWND hwndParent, WORD flags, LPCRECT lpRect, WORD chwnd, const HWND *ahwnd);
//
// Flags for SHGetSetSettings
//
typedef struct {
BOOL fShowAllObjects : 1;
BOOL fShowExtensions : 1;
BOOL fNoConfirmRecycle : 1;
UINT fRestFlags : 13;
LPSTR pszHiddenFileExts;
UINT cbHiddenFileExts;
} SHELLSTATE, *LPSHELLSTATE;
#define SSF_SHOWALLOBJECTS 0x0001
#define SSF_SHOWEXTENSIONS 0x0002
#define SSF_HIDDENFILEEXTS 0x0004
#define SSF_NOCONFIRMRECYCLE 0x8000
//
// for SHGetNetResource
//
typedef HANDLE HNRES;
//
// For SHCreateDefClassObject
//
typedef HRESULT (CALLBACK *LPFNCREATEINSTANCE)(LPUNKNOWN pUnkOuter, REFIID riid, LPVOID *ppvObject);
typedef void (WINAPI FAR* RUNDLLPROC)(HWND hwndStub,
HINSTANCE hAppInstance,
LPSTR lpszCmdLine, int nCmdShow);
//=======================================================================
// String constants for
// 1. Registration database keywords (prefix STRREG_)
// 2. Exported functions from handler dlls (prefix STREXP_)
// 3. .INI file keywords (prefix STRINI_)
// 4. Others (prefix STR_)
//=======================================================================
#define STRREG_SHELLUI "ShellUIHandler"
#define STRREG_SHELL "Shell"
#define STRREG_DEFICON "DefaultIcon"
#define STRREG_SHEX "shellex"
#define STRREG_SHEX_PROPSHEET STRREG_SHEX "\\PropertySheetHandlers"
#define STRREG_SHEX_DDHANDLER STRREG_SHEX "\\DragDropHandlers"
#define STRREG_SHEX_MENUHANDLER STRREG_SHEX "\\ContextMenuHandlers"
#define STRREG_SHEX_COPYHOOK "Directory\\" STRREG_SHEX "\\CopyHookHandlers"
#define STRREG_SHEX_PRNCOPYHOOK "Printers\\" STRREG_SHEX "\\CopyHookHandlers"
#define STREXP_CANUNLOAD "DllCanUnloadNow" // From OLE 2.0
#define STRINI_CLASSINFO ".ShellClassInfo" // secton name
#define STRINI_SHELLUI "ShellUIHandler"
#define STRINI_OPENDIRICON "OpenDirIcon"
#define STRINI_DIRICON "DirIcon"
#define STR_DESKTOPINI "desktop.ini"
// Maximum length of a path string
#define CCHPATHMAX MAX_PATH
#define MAXSPECLEN MAX_PATH
#define DRIVEID(path) ((path[0] - 'A') & 31)
#define ARRAYSIZE(a) (sizeof(a)/sizeof(a[0]))
#define PATH_CCH_EXT 64
// PathResolve flags
#define PRF_VERIFYEXISTS 0x0001
#define PRF_TRYPROGRAMEXTENSIONS (0x0002 | PRF_VERIFYEXISTS)
#define PRF_FIRSTDIRDEF 0x0004
#define PRF_DONTFINDLNK 0x0008 // if PRF_TRYPROGRAMEXTENSIONS is specified
//
// For CallCPLEntry16
//
DECLARE_HANDLE(FARPROC16);
// Needed for RunFileDlg
#define RFD_NOBROWSE 0x00000001
#define RFD_NODEFFILE 0x00000002
#define RFD_USEFULLPATHDIR 0x00000004
#define RFD_NOSHOWOPEN 0x00000008
#ifdef RFN_FIRST
#define RFN_EXECUTE (RFN_FIRST - 0)
typedef struct {
NMHDR hdr;
LPCSTR lpszCmd;
LPCSTR lpszWorkingDir;
int nShowCmd;
} NMRUNFILE, *LPNMRUNFILE;
#endif
// RUN FILE RETURN values from notify message
#define RFR_NOTHANDLED 0
#define RFR_SUCCESS 1
#define RFR_FAILURE 2
#define PathRemoveBlanksORD 33
#define PathFindFileNameORD 34
#define PathGetExtensionORD 158
#define PathFindExtensionORD 31
WINSHELLAPI LPSTR WINAPI PathAddBackslash(LPSTR lpszPath);
WINSHELLAPI LPSTR WINAPI PathRemoveBackslash(LPSTR lpszPath);
WINSHELLAPI void WINAPI PathRemoveBlanks(LPSTR lpszString);
WINSHELLAPI BOOL WINAPI PathRemoveFileSpec(LPSTR lpszPath);
WINSHELLAPI LPSTR WINAPI PathFindFileName(LPCSTR pPath);
WINSHELLAPI BOOL WINAPI PathIsRoot(LPCSTR lpszPath);
WINSHELLAPI BOOL WINAPI PathIsRelative(LPCSTR lpszPath);
WINSHELLAPI BOOL WINAPI PathIsUNC(LPCSTR lpsz);
WINSHELLAPI BOOL WINAPI PathIsDirectory(LPCSTR lpszPath);
WINSHELLAPI BOOL WINAPI PathIsExe(LPCSTR lpszPath);
WINSHELLAPI int WINAPI PathGetDriveNumber(LPCSTR lpszPath);
WINSHELLAPI LPSTR WINAPI PathCombine(LPSTR szDest, LPCSTR lpszDir, LPCSTR lpszFile);
WINSHELLAPI BOOL WINAPI PathAppend(LPSTR pPath, LPCSTR pMore);
WINSHELLAPI LPSTR WINAPI PathBuildRoot(LPSTR szRoot, int iDrive);
WINSHELLAPI int WINAPI PathCommonPrefix(LPCSTR pszFile1, LPCSTR pszFile2, LPSTR achPath);
WINSHELLAPI LPSTR WINAPI PathGetExtension(LPCSTR lpszPath, LPSTR lpszExtension, int cchExt);
WINSHELLAPI LPSTR WINAPI PathFindExtension(LPCSTR pszPath);
WINSHELLAPI BOOL WINAPI PathCompactPath(HDC hDC, LPSTR lpszPath, UINT dx);
WINSHELLAPI BOOL WINAPI PathFileExists(LPCSTR lpszPath);
WINSHELLAPI BOOL WINAPI PathMatchSpec(LPCSTR pszFile, LPCSTR pszSpec);
WINSHELLAPI BOOL WINAPI PathMakeUniqueName(LPSTR pszUniqueName, UINT cchMax, LPCSTR pszTemplate, LPCSTR pszLongPlate, LPCSTR pszDir);
WINSHELLAPI LPSTR WINAPI PathGetArgs(LPCSTR pszPath);
WINSHELLAPI BOOL WINAPI PathGetShortName(LPCSTR lpszLongName, LPSTR lpszShortName, UINT cbShortName);
WINSHELLAPI BOOL WINAPI PathGetLongName(LPCSTR lpszShortName, LPSTR lpszLongName, UINT cbLongName);
WINSHELLAPI void WINAPI PathQuoteSpaces(LPSTR lpsz);
WINSHELLAPI void WINAPI PathUnquoteSpaces(LPSTR lpsz);
WINSHELLAPI BOOL WINAPI PathDirectoryExists(LPCSTR lpszDir);
WINSHELLAPI void WINAPI PathQualify(LPSTR lpsz);
WINSHELLAPI int WINAPI PathResolve(LPSTR lpszPath, LPCSTR dirs[], UINT fFlags);
WINSHELLAPI LPSTR WINAPI PathGetNextComponent(LPCSTR lpszPath, LPSTR lpszComponent);
WINSHELLAPI LPSTR WINAPI PathFindNextComponent(LPCSTR lpszPath);
WINSHELLAPI BOOL WINAPI PathIsSameRoot(LPCSTR pszPath1, LPCSTR pszPath2);
WINSHELLAPI void WINAPI PathSetDlgItemPath(HWND hDlg, int id, LPCSTR pszPath);
WINSHELLAPI BOOL WINAPI ParseField(LPCSTR szData, int n, LPSTR szBuf, int iBufLen);
int WINAPI PathCleanupSpec(LPCSTR pszDir, LPSTR pszSpec);
//
// Return codes from PathCleanupSpec. Negative return values are
// unrecoverable errors
//
#define PCS_FATAL 0x80000000
#define PCS_REPLACEDCHAR 0x00000001
#define PCS_REMOVEDCHAR 0x00000002
#define PCS_TRUNCATED 0x00000004
#define PCS_PATHTOOLONG 0x00000008 // Always combined with FATAL
WINSHELLAPI int WINAPI RestartDialog(HWND hwnd, LPCSTR lpPrompt, DWORD dwReturn);
WINSHELLAPI void WINAPI ExitWindowsDialog(HWND hwnd);
WINSHELLAPI int WINAPI RunFileDlg(HWND hwndParent, HICON hIcon, LPCSTR lpszWorkingDir, LPCSTR lpszTitle,
LPCSTR lpszPrompt, DWORD dwFlags);
WINSHELLAPI int WINAPI PickIconDlg(HWND hwnd, LPSTR pszIconPath, UINT cbIconPath, int *piIconIndex);
WINSHELLAPI BOOL WINAPI GetFileNameFromBrowse(HWND hwnd, LPSTR szFilePath, UINT cbFilePath, LPCSTR szWorkingDir, LPCSTR szDefExt, LPCSTR szFilters, LPCSTR szTitle);
WINSHELLAPI int WINAPI DriveType(int iDrive);
WINSHELLAPI void WINAPI InvalidateDriveType(int iDrive);
WINSHELLAPI int WINAPI IsNetDrive(int iDrive);
WINSHELLAPI UINT WINAPI Shell_MergeMenus(HMENU hmDst, HMENU hmSrc, UINT uInsert, UINT uIDAdjust, UINT uIDAdjustMax, ULONG uFlags);
WINSHELLAPI void WINAPI SHGetSetSettings(LPSHELLSTATE lpss, DWORD dwMask, BOOL bSet);
WINSHELLAPI LRESULT WINAPI SHRenameFile(HWND hwndParent, LPCSTR pszDir, LPCSTR pszOldName, LPCSTR pszNewName, BOOL bRetainExtension);
WINSHELLAPI UINT WINAPI SHGetNetResource(HNRES hnres, UINT iItem, LPNETRESOURCE pnres, UINT cbMax);
WINSHELLAPI STDAPI SHCreateDefClassObject(REFIID riid, LPVOID * ppv, LPFNCREATEINSTANCE lpfn, UINT *pcRefDll, REFIID riidInstance);
WINSHELLAPI LRESULT WINAPI CallCPLEntry16(HINSTANCE hinst, FARPROC16 lpfnEntry, HWND hwndCPL, UINT msg, DWORD lParam1, DWORD lParam2);
WINSHELLAPI BOOL WINAPI SHRunControlPanel(LPCSTR lpcszCmdLine, HWND hwndMsgParent);
WINSHELLAPI STDAPI SHCLSIDFromString(LPCSTR lpsz, LPCLSID lpclsid);
#define SHObjectPropertiesORD 178
WINSHELLAPI BOOL WINAPI SHObjectProperties(HWND hwndOwner, DWORD dwType, LPCSTR lpObject, LPCSTR lpPage);
WINSHELLAPI int WINAPI DriveType(int iDrive);
WINSHELLAPI int WINAPI RestartDialog(HWND hwnd, LPCSTR lpPrompt, DWORD dwReturn);
WINSHELLAPI int WINAPI PickIconDlg(HWND hwnd, LPSTR pszIconPath, UINT cbIconPath, int *piIconIndex);
//===================================================================
// Shell_MergeMenu parameter
//
#define MM_ADDSEPARATOR 0x00000001L
#define MM_SUBMENUSHAVEIDS 0x00000002L
//-------- drive type identification --------------
// iDrive drive index (0=A, 1=B, ...)
//
#define DRIVE_CDROM 5 // extended DriveType() types
#define DRIVE_RAMDRIVE 6
#define DRIVE_TYPE 0x000F // type masek
#define DRIVE_SLOW 0x0010 // drive is on a slow link
#define DRIVE_LFN 0x0020 // drive supports LFNs
#define DRIVE_AUTORUN 0x0040 // drive has AutoRun.inf in root.
#define DRIVE_AUDIOCD 0x0080 // drive is a AudioCD
#define DRIVE_AUTOOPEN 0x0100 // should *always* auto open on insert
#define DRIVE_NETUNAVAIL 0x0200 // Network drive that is not available
#define DRIVE_SHELLOPEN 0x0400 // should auto open on insert, if shell has focus
#define DriveTypeFlags(iDrive) DriveType('A' + (iDrive))
#define DriveIsSlow(iDrive) (DriveTypeFlags(iDrive) & DRIVE_SLOW)
#define DriveIsLFN(iDrive) (DriveTypeFlags(iDrive) & DRIVE_LFN)
#define DriveIsAutoRun(iDrive) (DriveTypeFlags(iDrive) & DRIVE_AUTORUN)
#define DriveIsAutoOpen(iDrive) (DriveTypeFlags(iDrive) & DRIVE_AUTOOPEN)
#define DriveIsShellOpen(iDrive) (DriveTypeFlags(iDrive) & DRIVE_SHELLOPEN)
#define DriveIsAudioCD(iDrive) (DriveTypeFlags(iDrive) & DRIVE_AUDIOCD)
#define DriveIsNetUnAvail(iDrive) (DriveTypeFlags(iDrive) & DRIVE_NETUNAVAIL)
#define IsCDRomDrive(iDrive) (DriveType(iDrive) == DRIVE_CDROM)
#define IsRamDrive(iDrive) (DriveType(iDrive) == DRIVE_RAMDRIVE)
#define IsRemovableDrive(iDrive) (DriveType(iDrive) == DRIVE_REMOVABLE)
#define IsRemoteDrive(iDrive) (DriveType(iDrive) == DRIVE_REMOTE)
// should be moved to shell32s private include files
WINSHELLAPI int WINAPI GetDefaultDrive();
WINSHELLAPI int WINAPI SetDefaultDrive(int iDrive);
WINSHELLAPI int WINAPI SetDefaultDirectory(LPCSTR lpPath);
WINSHELLAPI void WINAPI GetDefaultDirectory(int iDrive, LPSTR lpPath);
#define POSINVALID 32767 // values for invalid position
#define IDCMD_SYSTEMFIRST 0x8000
#define IDCMD_SYSTEMLAST 0xbfff
#define IDCMD_CANCELED 0xbfff
#define IDCMD_PROCESSED 0xbffe
#define IDCMD_DEFAULT 0xbffe
//====== SEMI-PRIVATE API ===============================
DECLARE_HANDLE( HPSXA );
WINSHELLAPI HPSXA SHCreatePropSheetExtArray( HKEY hKey, PCSTR pszSubKey, UINT max_iface );
WINSHELLAPI void SHDestroyPropSheetExtArray( HPSXA hpsxa );
WINSHELLAPI UINT SHAddFromPropSheetExtArray( HPSXA hpsxa, LPFNADDPROPSHEETPAGE lpfnAddPage, LPARAM lParam );
WINSHELLAPI UINT SHReplaceFromPropSheetExtArray( HPSXA hpsxa, UINT uPageID, LPFNADDPROPSHEETPAGE lpfnReplaceWith, LPARAM lParam );
//====== SEMI-PRIVATE API ORDINALS ===============================
// This is the list of semi-private ordinals we semi-publish.
#define SHAddFromPropSheetExtArrayORD 167
#define SHCreatePropSheetExtArrayORD 168
#define SHDestroyPropSheetExtArrayORD 169
#define SHReplaceFromPropSheetExtArrayORD 170
#define SHCreateDefClassObjectORD 70
#define SHGetNetResourceORD 69
#define SHEXP_SHADDFROMPROPSHEETEXTARRAY MAKEINTRESOURCE(SHAddFromPropSheetExtArrayORD)
#define SHEXP_SHCREATEPROPSHEETEXTARRAY MAKEINTRESOURCE(SHCreatePropSheetExtArrayORD)
#define SHEXP_SHDESTROYPROPSHEETEXTARRAY MAKEINTRESOURCE(SHDestroyPropSheetExtArrayORD)
#define SHEXP_SHREPLACEFROMPROPSHEETEXTARRAY MAKEINTRESOURCE(SHReplaceFromPropSheetExtArrayORD)
#define SHEXP_SHCREATEDEFCLASSOBJECT MAKEINTRESOURCE(SHCreateDefClassObjectORD)
#define SHEXP_SHGETNETRESOURCE MAKEINTRESOURCE(SHGetNetResourceORD)
/*
* The SHFormatDrive API provides access to the Shell
* format dialog. This allows apps which want to format disks
* to bring up the same dialog that the Shell does to do it.
*
* This dialog is not sub-classable. You cannot put custom
* controls in it. If you want this ability, you will have
* to write your own front end for the DMaint_FormatDrive
* engine.
*
* NOTE that the user can format as many diskettes in the specified
* drive, or as many times, as he/she wishes to. There is no way to
* force any specififc number of disks to format. If you want this
* ability, you will have to write your own front end for the
* DMaint_FormatDrive engine.
*
* NOTE also that the format will not start till the user pushes the
* start button in the dialog. There is no way to do auto start. If
* you want this ability, you will have to write your own front end
* for the DMaint_FormatDrive engine.
*
* PARAMETERS
*
* hwnd = The window handle of the window which will own the dialog
* NOTE that unlike SHCheckDrive, hwnd == NULL does not cause
* this dialog to come up as a "top level application" window.
* This parameter should always be non-null, this dialog is
* only designed to be the child of another window, not a
* stand-alone application.
* drive = The 0 based (A: == 0) drive number of the drive to format
* fmtID = The ID of the physical format to format the disk with
* NOTE: The special value SHFMT_ID_DEFAULT means "use the
* default format specified by the DMaint_FormatDrive
* engine". If you want to FORCE a particular format
* ID "up front" you will have to call
* DMaint_GetFormatOptions yourself before calling
* this to obtain the valid list of phys format IDs
* (contents of the PhysFmtIDList array in the
* FMTINFOSTRUCT).
* options = There is currently only two option bits defined
*
* SHFMT_OPT_FULL
* SHFMT_OPT_SYSONLY
*
* The normal defualt in the Shell format dialog is
* "Quick Format", setting this option bit indicates that
* the caller wants to start with FULL format selected
* (this is useful for folks detecting "unformatted" disks
* and wanting to bring up the format dialog).
*
* The SHFMT_OPT_SYSONLY initializes the dialog to
* default to just sys the disk.
*
* All other bits are reserved for future expansion and
* must be 0.
*
* Please note that this is a bit field and not a value
* and treat it accordingly.
*
* RETURN
* The return is either one of the SHFMT_* values, or if the
* returned DWORD value is not == to one of these values, then
* the return is the physical format ID of the last succesful
* format. The LOWORD of this value can be passed on subsequent
* calls as the fmtID parameter to "format the same type you did
* last time".
*
*/
DWORD WINAPI SHFormatDrive(HWND hwnd, UINT drive, UINT fmtID, UINT options);
//
// Special value of fmtID which means "use the default format"
//
#define SHFMT_ID_DEFAULT 0xFFFF
//
// Option bits for options parameter
//
#define SHFMT_OPT_FULL 0x0001
#define SHFMT_OPT_SYSONLY 0x0002
//
// Special return values. PLEASE NOTE that these are DWORD values.
//
#define SHFMT_ERROR 0xFFFFFFFFL // Error on last format, drive may be formatable
#define SHFMT_CANCEL 0xFFFFFFFEL // Last format was canceled
#define SHFMT_NOFORMAT 0xFFFFFFFDL // Drive is not formatable
#ifdef __cplusplus
}
#endif /* __cplusplus */
#ifndef RC_INVOKED
#pragma pack()
#endif /* !RC_INVOKED */
#endif // _SHSEMIP_H_