mirror of
https://github.com/reactos/reactos.git
synced 2025-02-24 01:15:09 +00:00
* Implement SHFormatDrive using fmifs api (format drive dialog in explorer)
svn path=/trunk/; revision=35319
This commit is contained in:
parent
5f696de7d6
commit
0ae6a9811c
31 changed files with 618 additions and 25 deletions
|
@ -26,29 +26,27 @@
|
|||
#define ConvertUlongToLargeInteger RtlConvertUlongToLargeInteger
|
||||
#define LargeIntegerSubtract RtlLargeIntegerSubtract
|
||||
#define MAX_PROPERTY_SHEET_PAGE 32
|
||||
|
||||
#define WIN32_NO_STATUS
|
||||
#define NTOS_MODE_USER
|
||||
#define UNICODE
|
||||
#define _UNICODE
|
||||
#include <windows.h>
|
||||
#include <ndk/ntndk.h>
|
||||
|
||||
#include <string.h>
|
||||
#include <stdarg.h>
|
||||
#include <stdio.h>
|
||||
#include "winerror.h"
|
||||
#include "windef.h"
|
||||
#include "winbase.h"
|
||||
#include "winreg.h"
|
||||
#include "wingdi.h"
|
||||
#include "winuser.h"
|
||||
#include "commdlg.h"
|
||||
#include "wine/debug.h"
|
||||
|
||||
#include "shellapi.h"
|
||||
#include <shlwapi.h>
|
||||
#include "shlobj.h"
|
||||
#include "shell32_main.h"
|
||||
#include "shresdef.h"
|
||||
#include "undocshell.h"
|
||||
|
||||
#include <shlwapi.h>
|
||||
#include <shlobj.h>
|
||||
#include <prsht.h>
|
||||
#include <initguid.h>
|
||||
#include <devguid.h>
|
||||
#include <winioctl.h>
|
||||
#include <largeint.h>
|
||||
#include <fmifs/fmifs.h>
|
||||
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(shell);
|
||||
|
||||
|
@ -59,14 +57,64 @@ typedef enum
|
|||
HWPD_MAX = HWPD_LARGELIST
|
||||
} HWPAGE_DISPLAYMODE, *PHWPAGE_DISPLAYMODE;
|
||||
|
||||
typedef
|
||||
BOOLEAN
|
||||
(NTAPI *INITIALIZE_FMIFS)(
|
||||
IN PVOID hinstDll,
|
||||
IN DWORD dwReason,
|
||||
IN PVOID reserved
|
||||
);
|
||||
typedef
|
||||
BOOLEAN
|
||||
(NTAPI *QUERY_AVAILABLEFSFORMAT)(
|
||||
IN DWORD Index,
|
||||
IN OUT PWCHAR FileSystem,
|
||||
OUT UCHAR* Major,
|
||||
OUT UCHAR* Minor,
|
||||
OUT BOOLEAN* LastestVersion
|
||||
);
|
||||
typedef
|
||||
BOOLEAN
|
||||
(NTAPI *ENABLEVOLUMECOMPRESSION)(
|
||||
IN PWCHAR DriveRoot,
|
||||
IN USHORT Compression
|
||||
);
|
||||
|
||||
typedef
|
||||
VOID
|
||||
(NTAPI *FORMAT_EX)(
|
||||
IN PWCHAR DriveRoot,
|
||||
IN FMIFS_MEDIA_FLAG MediaFlag,
|
||||
IN PWCHAR Format,
|
||||
IN PWCHAR Label,
|
||||
IN BOOLEAN QuickFormat,
|
||||
IN ULONG ClusterSize,
|
||||
IN PFMIFSCALLBACK Callback
|
||||
);
|
||||
|
||||
|
||||
typedef struct
|
||||
{
|
||||
WCHAR Drive;
|
||||
UINT Options;
|
||||
HMODULE hLibrary;
|
||||
QUERY_AVAILABLEFSFORMAT QueryAvailableFileSystemFormat;
|
||||
FORMAT_EX FormatEx;
|
||||
ENABLEVOLUMECOMPRESSION EnableVolumeCompression;
|
||||
UINT Result;
|
||||
}FORMAT_DRIVE_CONTEXT, *PFORMAT_DRIVE_CONTEXT;
|
||||
|
||||
HWND WINAPI
|
||||
DeviceCreateHardwarePageEx(HWND hWndParent,
|
||||
LPGUID lpGuids,
|
||||
UINT uNumberOfGuids,
|
||||
HWPAGE_DISPLAYMODE DisplayMode);
|
||||
|
||||
HPROPSHEETPAGE SH_CreatePropertySheetPage(LPSTR resname, DLGPROC dlgproc, LPARAM lParam, LPWSTR szTitle);
|
||||
|
||||
#define DRIVE_PROPERTY_PAGES (3)
|
||||
|
||||
extern HINSTANCE shell32_hInstance;
|
||||
|
||||
static
|
||||
LARGE_INTEGER
|
||||
|
@ -201,11 +249,11 @@ InitializeGeneralDriveDialog(HWND hwndDlg, WCHAR * szDrive)
|
|||
|
||||
Result = GetFreeBytesShare(TotalNumberOfFreeBytes, TotalNumberOfBytes);
|
||||
/* set free bytes percentage */
|
||||
sprintfW(szResult, L"%02d%%", Result.QuadPart);
|
||||
swprintf(szResult, L"%02d%%", Result.QuadPart);
|
||||
SendDlgItemMessageW(hwndDlg, 14007, WM_SETTEXT, (WPARAM)0, (LPARAM)szResult);
|
||||
/* store used share amount */
|
||||
Result = LargeIntegerSubtract(ConvertUlongToLargeInteger(100), Result);
|
||||
sprintfW(szResult, L"%02d%%", Result.QuadPart);
|
||||
swprintf(szResult, L"%02d%%", Result.QuadPart);
|
||||
SendDlgItemMessageW(hwndDlg, 14005, WM_SETTEXT, (WPARAM)0, (LPARAM)szResult);
|
||||
if (LoadStringW(shell32_hInstance, IDS_DRIVE_FIXED, szBuffer, sizeof(szBuffer) / sizeof(WCHAR)))
|
||||
SendDlgItemMessageW(hwndDlg, 14002, WM_SETTEXT, (WPARAM)0, (LPARAM)szBuffer);
|
||||
|
@ -214,7 +262,7 @@ InitializeGeneralDriveDialog(HWND hwndDlg, WCHAR * szDrive)
|
|||
}
|
||||
/* set drive description */
|
||||
SendDlgItemMessageW(hwndDlg, 14010, WM_GETTEXT, (WPARAM)50, (LPARAM)szFormat);
|
||||
sprintfW(szBuffer, szFormat, szDrive);
|
||||
swprintf(szBuffer, szFormat, szDrive);
|
||||
SendDlgItemMessageW(hwndDlg, 14010, WM_SETTEXT, (WPARAM)NULL, (LPARAM)szBuffer);
|
||||
}
|
||||
|
||||
|
@ -493,3 +541,497 @@ SH_ShowDriveProperties(WCHAR * drive)
|
|||
else
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
VOID
|
||||
InsertDefaultClusterSizeForFs(HWND hwndDlg, PFORMAT_DRIVE_CONTEXT pContext)
|
||||
{
|
||||
WCHAR szFs[100] = {0};
|
||||
WCHAR szDrive[3] = { L'C', '\\', 0 };
|
||||
INT iSelIndex;
|
||||
ULARGE_INTEGER FreeBytesAvailableUser, TotalNumberOfBytes;
|
||||
DWORD ClusterSize;
|
||||
LRESULT lIndex;
|
||||
HWND hDlgCtrl;
|
||||
|
||||
hDlgCtrl = GetDlgItem(hwndDlg, 28677);
|
||||
iSelIndex = SendMessage(hDlgCtrl, CB_GETCURSEL, 0, 0);
|
||||
if (iSelIndex == CB_ERR)
|
||||
return;
|
||||
|
||||
if (SendMessageW(hDlgCtrl, CB_GETLBTEXT, iSelIndex, (LPARAM)szFs) == CB_ERR)
|
||||
return;
|
||||
|
||||
szFs[(sizeof(szFs)/sizeof(WCHAR))-1] = L'\0';
|
||||
szDrive[0] = pContext->Drive;
|
||||
|
||||
if (!GetDiskFreeSpaceExW(szDrive, &FreeBytesAvailableUser, &TotalNumberOfBytes, NULL))
|
||||
return;
|
||||
|
||||
if (!wcsicmp(szFs, L"FAT16"))
|
||||
{
|
||||
if (TotalNumberOfBytes.QuadPart <= (16 * 1024 * 1024))
|
||||
ClusterSize = 2048;
|
||||
else if (TotalNumberOfBytes.QuadPart <= (32 * 1024 * 1024))
|
||||
ClusterSize = 512;
|
||||
else if (TotalNumberOfBytes.QuadPart <= (64 * 1024 * 1024))
|
||||
ClusterSize = 1024;
|
||||
else if (TotalNumberOfBytes.QuadPart <= (128 * 1024 * 1024))
|
||||
ClusterSize = 2048;
|
||||
else if (TotalNumberOfBytes.QuadPart <= (256 * 1024 * 1024))
|
||||
ClusterSize = 4096;
|
||||
else if (TotalNumberOfBytes.QuadPart <= (512 * 1024 * 1024))
|
||||
ClusterSize = 8192;
|
||||
else if (TotalNumberOfBytes.QuadPart <= (1024 * 1024 * 1024))
|
||||
ClusterSize = 16384;
|
||||
else if (TotalNumberOfBytes.QuadPart <= (2048LL * 1024LL * 1024LL))
|
||||
ClusterSize = 32768;
|
||||
else if (TotalNumberOfBytes.QuadPart <= (4096LL * 1024LL * 1024LL))
|
||||
ClusterSize = 8192;
|
||||
else
|
||||
{
|
||||
TRACE("FAT16 is not supported on hdd larger than 4G current %lu\n", TotalNumberOfBytes.QuadPart);
|
||||
SendMessageW(hDlgCtrl, CB_DELETESTRING, iSelIndex, 0);
|
||||
return;
|
||||
}
|
||||
|
||||
if (LoadStringW(shell32_hInstance, IDS_DEFAULT_CLUSTER_SIZE, szFs, sizeof(szFs)/sizeof(WCHAR)))
|
||||
{
|
||||
hDlgCtrl = GetDlgItem(hwndDlg, 28680);
|
||||
szFs[(sizeof(szFs)/sizeof(WCHAR))-1] = L'\0';
|
||||
SendMessageW(hDlgCtrl, CB_RESETCONTENT, 0, 0);
|
||||
lIndex = SendMessageW(hDlgCtrl, CB_ADDSTRING, 0, (LPARAM)szFs);
|
||||
if (lIndex != CB_ERR)
|
||||
SendMessageW(hDlgCtrl, CB_SETITEMDATA, lIndex, (LPARAM)ClusterSize);
|
||||
}
|
||||
}
|
||||
else if (!wcsicmp(szFs, L"FAT32"))
|
||||
{
|
||||
if (TotalNumberOfBytes.QuadPart <=(64 * 1024 * 1024))
|
||||
ClusterSize = 512;
|
||||
else if (TotalNumberOfBytes.QuadPart <= (128 * 1024 * 1024))
|
||||
ClusterSize = 1024;
|
||||
else if (TotalNumberOfBytes.QuadPart <= (256 * 1024 * 1024))
|
||||
ClusterSize = 2048;
|
||||
else if (TotalNumberOfBytes.QuadPart <= (8192LL * 1024LL * 1024LL))
|
||||
ClusterSize = 2048;
|
||||
else if (TotalNumberOfBytes.QuadPart <= (16384LL * 1024LL * 1024LL))
|
||||
ClusterSize = 8192;
|
||||
else if (TotalNumberOfBytes.QuadPart <= (32768LL * 1024LL * 1024LL))
|
||||
ClusterSize = 16384;
|
||||
else
|
||||
{
|
||||
TRACE("FAT32 is not supported on hdd larger than 32G current %lu\n", TotalNumberOfBytes.QuadPart);
|
||||
SendMessageW(hDlgCtrl, CB_DELETESTRING, iSelIndex, 0);
|
||||
return;
|
||||
}
|
||||
if (LoadStringW(shell32_hInstance, IDS_DEFAULT_CLUSTER_SIZE, szFs, sizeof(szFs)/sizeof(WCHAR)))
|
||||
{
|
||||
hDlgCtrl = GetDlgItem(hwndDlg, 28680);
|
||||
szFs[(sizeof(szFs)/sizeof(WCHAR))-1] = L'\0';
|
||||
SendMessageW(hDlgCtrl, CB_RESETCONTENT, 0, 0);
|
||||
lIndex = SendMessageW(hDlgCtrl, CB_ADDSTRING, 0, (LPARAM)szFs);
|
||||
if (lIndex != CB_ERR)
|
||||
SendMessageW(hDlgCtrl, CB_SETITEMDATA, lIndex, (LPARAM)ClusterSize);
|
||||
}
|
||||
}
|
||||
else if (!wcsicmp(szFs, L"NTFS"))
|
||||
{
|
||||
if (TotalNumberOfBytes.QuadPart <=(512 * 1024 * 1024))
|
||||
ClusterSize = 512;
|
||||
else if (TotalNumberOfBytes.QuadPart <= (1024 * 1024 * 1024))
|
||||
ClusterSize = 1024;
|
||||
else if (TotalNumberOfBytes.QuadPart <= (2048LL * 1024LL * 1024LL))
|
||||
ClusterSize = 2048;
|
||||
else
|
||||
ClusterSize = 2048;
|
||||
|
||||
if (LoadStringW(shell32_hInstance, IDS_DEFAULT_CLUSTER_SIZE, szFs, sizeof(szFs)/sizeof(WCHAR)))
|
||||
{
|
||||
hDlgCtrl = GetDlgItem(hwndDlg, 28680);
|
||||
szFs[(sizeof(szFs)/sizeof(WCHAR))-1] = L'\0';
|
||||
SendMessageW(hDlgCtrl, CB_RESETCONTENT, 0, 0);
|
||||
lIndex = SendMessageW(hDlgCtrl, CB_ADDSTRING, 0, (LPARAM)szFs);
|
||||
if (lIndex != CB_ERR)
|
||||
SendMessageW(hDlgCtrl, CB_SETITEMDATA, lIndex, (LPARAM)ClusterSize);
|
||||
}
|
||||
ClusterSize = 512;
|
||||
for (lIndex = 0; lIndex < 4; lIndex++)
|
||||
{
|
||||
TotalNumberOfBytes.QuadPart = ClusterSize;
|
||||
if (StrFormatByteSizeW(TotalNumberOfBytes.QuadPart, szFs, sizeof(szFs)/sizeof(WCHAR)))
|
||||
{
|
||||
lIndex = SendMessageW(hDlgCtrl, CB_ADDSTRING, 0, (LPARAM)szFs);
|
||||
if (lIndex != CB_ERR)
|
||||
SendMessageW(hDlgCtrl, CB_SETITEMDATA, lIndex, (LPARAM)ClusterSize);
|
||||
}
|
||||
ClusterSize *= 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
VOID
|
||||
InitializeFormatDriveDlg(HWND hwndDlg, PFORMAT_DRIVE_CONTEXT pContext)
|
||||
{
|
||||
WCHAR szText[120];
|
||||
WCHAR szDrive[3] = { L'C', '\\', 0 };
|
||||
WCHAR szFs[30] = {0};
|
||||
INT Length, TempLength;
|
||||
DWORD dwSerial, dwMaxComp, dwFileSys;
|
||||
ULARGE_INTEGER FreeBytesAvailableUser, TotalNumberOfBytes;
|
||||
DWORD dwIndex, dwDefault;
|
||||
UCHAR uMinor, uMajor;
|
||||
BOOLEAN Latest;
|
||||
HWND hDlgCtrl;
|
||||
|
||||
Length = GetWindowTextW(hwndDlg, szText, sizeof(szText)/sizeof(WCHAR));
|
||||
szDrive[0] = pContext->Drive;
|
||||
if (GetVolumeInformationW(szDrive, &szText[Length+1], (sizeof(szText)/sizeof(WCHAR))- Length - 2, &dwSerial, &dwMaxComp, &dwFileSys, szFs, sizeof(szFs)/sizeof(WCHAR)))
|
||||
{
|
||||
szText[Length] = L' ';
|
||||
szText[(sizeof(szText)/sizeof(WCHAR))-1] = L'\0';
|
||||
TempLength = wcslen(&szText[Length+1]);
|
||||
if (!TempLength)
|
||||
{
|
||||
/* load default volume label */
|
||||
TempLength = LoadStringW(shell32_hInstance, IDS_DRIVE_FIXED, &szText[Length+1], (sizeof(szText)/sizeof(WCHAR))- Length - 2);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* set volume label */
|
||||
szText[(sizeof(szText)/sizeof(WCHAR))-1] = L'\0';
|
||||
SendDlgItemMessageW(hwndDlg, 28679, WM_SETTEXT, 0, (LPARAM)&szText[Length+1]);
|
||||
}
|
||||
Length += TempLength + 1;
|
||||
}
|
||||
if (Length + 4 < (sizeof(szText)/sizeof(WCHAR)))
|
||||
{
|
||||
szText[Length] = L' ';
|
||||
szText[Length+1] = L'(';
|
||||
szText[Length+2] = szDrive[0];
|
||||
szText[Length+3] = L')';
|
||||
Length +=4;
|
||||
}
|
||||
|
||||
if (Length < (sizeof(szText)/sizeof(WCHAR)))
|
||||
szText[Length] = L'\0';
|
||||
else
|
||||
szText[(sizeof(szText)/sizeof(WCHAR))-1] = L'\0';
|
||||
|
||||
/* set window text */
|
||||
SetWindowTextW(hwndDlg, szText);
|
||||
|
||||
if (GetDiskFreeSpaceExW(szDrive, &FreeBytesAvailableUser, &TotalNumberOfBytes, NULL))
|
||||
{
|
||||
if (StrFormatByteSizeW(TotalNumberOfBytes.QuadPart, szText, sizeof(szText)/sizeof(WCHAR)))
|
||||
{
|
||||
/* add drive capacity */
|
||||
szText[(sizeof(szText)/sizeof(WCHAR))-1] = L'\0';
|
||||
SendDlgItemMessageW(hwndDlg, 28673, LB_ADDSTRING, 0, (LPARAM)szText);
|
||||
}
|
||||
}
|
||||
|
||||
if (pContext->Options & SHFMT_OPT_FULL)
|
||||
{
|
||||
/* check quick format button */
|
||||
SendDlgItemMessageW(hwndDlg, 28674, BM_SETCHECK, BST_CHECKED, 0);
|
||||
}
|
||||
|
||||
/* enumerate all available filesystems */
|
||||
dwIndex = 0;
|
||||
dwDefault = 0;
|
||||
hDlgCtrl = GetDlgItem(hwndDlg, 28677);
|
||||
while(pContext->QueryAvailableFileSystemFormat(dwIndex, szText, &uMajor, &uMinor, &Latest))
|
||||
{
|
||||
szText[(sizeof(szText)/sizeof(WCHAR))-1] = L'\0';
|
||||
if (!wcsicmp(szText, szFs))
|
||||
dwDefault = dwIndex;
|
||||
|
||||
SendMessageW(hDlgCtrl, CB_ADDSTRING, 0, (LPARAM)szText);
|
||||
dwIndex++;
|
||||
}
|
||||
|
||||
if (!dwIndex)
|
||||
{
|
||||
ERR("no filesystem providers\n");
|
||||
return;
|
||||
}
|
||||
|
||||
/* select default filesys */
|
||||
SendMessageW(hDlgCtrl, CB_SETCURSEL, dwIndex, 0);
|
||||
/* setup cluster combo */
|
||||
InsertDefaultClusterSizeForFs(hwndDlg, pContext);
|
||||
/* hide progress control */
|
||||
ShowWindow(GetDlgItem(hwndDlg, 28678), SW_HIDE);
|
||||
}
|
||||
|
||||
HWND FormatDrvDialog = NULL;
|
||||
BOOLEAN bSuccess = FALSE;
|
||||
|
||||
|
||||
BOOLEAN
|
||||
NTAPI
|
||||
FormatExCB(
|
||||
IN CALLBACKCOMMAND Command,
|
||||
IN ULONG SubAction,
|
||||
IN PVOID ActionInfo)
|
||||
{
|
||||
PDWORD Progress;
|
||||
PBOOLEAN pSuccess;
|
||||
switch(Command)
|
||||
{
|
||||
case PROGRESS:
|
||||
Progress = (PDWORD)ActionInfo;
|
||||
SendDlgItemMessageW(FormatDrvDialog, 28678, PBM_SETPOS, (WPARAM)*Progress, 0);
|
||||
break;
|
||||
case DONE:
|
||||
pSuccess = (PBOOLEAN)ActionInfo;
|
||||
bSuccess = (*pSuccess);
|
||||
break;
|
||||
|
||||
case VOLUMEINUSE:
|
||||
case INSUFFICIENTRIGHTS:
|
||||
case FSNOTSUPPORTED:
|
||||
case CLUSTERSIZETOOSMALL:
|
||||
bSuccess = FALSE;
|
||||
FIXME("\n");
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
VOID
|
||||
FormatDrive(HWND hwndDlg, PFORMAT_DRIVE_CONTEXT pContext)
|
||||
{
|
||||
WCHAR szDrive[3] = { L'C', '\\', 0 };
|
||||
WCHAR szFileSys[40] = {0};
|
||||
WCHAR szLabel[40] = {0};
|
||||
INT iSelIndex;
|
||||
UINT Length;
|
||||
HWND hDlgCtrl;
|
||||
BOOL QuickFormat;
|
||||
DWORD ClusterSize;
|
||||
|
||||
/* set volume path */
|
||||
szDrive[0] = pContext->Drive;
|
||||
|
||||
/* get filesystem */
|
||||
hDlgCtrl = GetDlgItem(hwndDlg, 28677);
|
||||
iSelIndex = SendMessageW(hDlgCtrl, CB_GETCURSEL, 0, 0);
|
||||
if (iSelIndex == CB_ERR)
|
||||
{
|
||||
FIXME("\n");
|
||||
return;
|
||||
}
|
||||
Length = SendMessageW(hDlgCtrl, CB_GETLBTEXTLEN, iSelIndex, 0);
|
||||
if (Length == CB_ERR || Length + 1> sizeof(szFileSys)/sizeof(WCHAR))
|
||||
{
|
||||
FIXME("\n");
|
||||
return;
|
||||
}
|
||||
|
||||
/* retrieve the file system */
|
||||
SendMessageW(hDlgCtrl, CB_GETLBTEXT, iSelIndex, (LPARAM)szFileSys);
|
||||
szFileSys[(sizeof(szFileSys)/sizeof(WCHAR))-1] = L'\0';
|
||||
|
||||
/* retrieve the volume label */
|
||||
hDlgCtrl = GetWindow(hwndDlg, 28679);
|
||||
Length = SendMessageW(hDlgCtrl, WM_GETTEXTLENGTH, 0, 0);
|
||||
if (Length + 1 > sizeof(szLabel)/sizeof(WCHAR))
|
||||
{
|
||||
FIXME("\n");
|
||||
return;
|
||||
}
|
||||
SendMessageW(hDlgCtrl, WM_GETTEXT, sizeof(szLabel)/sizeof(WCHAR), (LPARAM)szLabel);
|
||||
szLabel[(sizeof(szLabel)/sizeof(WCHAR))-1] = L'\0';
|
||||
|
||||
/* check for quickformat */
|
||||
if (SendDlgItemMessageW(hwndDlg, 28674, BM_GETCHECK, 0, 0) == BST_CHECKED)
|
||||
QuickFormat = TRUE;
|
||||
else
|
||||
QuickFormat = FALSE;
|
||||
|
||||
/* get the cluster size */
|
||||
hDlgCtrl = GetDlgItem(hwndDlg, 28680);
|
||||
iSelIndex = SendMessageW(hDlgCtrl, CB_GETCURSEL, 0, 0);
|
||||
if (iSelIndex == CB_ERR)
|
||||
{
|
||||
FIXME("\n");
|
||||
return;
|
||||
}
|
||||
ClusterSize = SendMessageW(hDlgCtrl, CB_GETITEMDATA, iSelIndex, 0);
|
||||
if (ClusterSize == CB_ERR)
|
||||
{
|
||||
FIXME("\n");
|
||||
return;
|
||||
}
|
||||
|
||||
hDlgCtrl = GetDlgItem(hwndDlg, 28680);
|
||||
ShowWindow(hDlgCtrl, SW_SHOW);
|
||||
SendMessageW(hDlgCtrl, PBM_SETRANGE, 0, MAKELPARAM(0, 100));
|
||||
bSuccess = FALSE;
|
||||
|
||||
/* FIXME
|
||||
* will cause display problems
|
||||
* when performing more than one format
|
||||
*/
|
||||
FormatDrvDialog = hwndDlg;
|
||||
|
||||
pContext->FormatEx(szDrive,
|
||||
FMIFS_HARDDISK, /* FIXME */
|
||||
szFileSys,
|
||||
szLabel,
|
||||
QuickFormat,
|
||||
ClusterSize,
|
||||
FormatExCB);
|
||||
|
||||
ShowWindow(hDlgCtrl, SW_HIDE);
|
||||
FormatDrvDialog = NULL;
|
||||
if (!bSuccess)
|
||||
{
|
||||
pContext->Result = SHFMT_ERROR;
|
||||
}
|
||||
else if (QuickFormat)
|
||||
{
|
||||
pContext->Result = SHFMT_OPT_FULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
pContext->Result = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
BOOL
|
||||
CALLBACK
|
||||
FormatDriveDlg(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
PFORMAT_DRIVE_CONTEXT pContext;
|
||||
|
||||
switch(uMsg)
|
||||
{
|
||||
case WM_INITDIALOG:
|
||||
InitializeFormatDriveDlg(hwndDlg, (PFORMAT_DRIVE_CONTEXT)lParam);
|
||||
SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)lParam);
|
||||
return TRUE;
|
||||
case WM_COMMAND:
|
||||
switch(LOWORD(wParam))
|
||||
{
|
||||
case IDOK:
|
||||
pContext = (PFORMAT_DRIVE_CONTEXT)GetWindowLongPtr(hwndDlg, DWLP_USER);
|
||||
FormatDrive(hwndDlg, pContext);
|
||||
break;
|
||||
case IDCANCEL:
|
||||
pContext = (PFORMAT_DRIVE_CONTEXT)GetWindowLongPtr(hwndDlg, DWLP_USER);
|
||||
EndDialog(hwndDlg, pContext->Result);
|
||||
break;
|
||||
case 28677: // filesystem combo
|
||||
if (HIWORD(wParam) == CBN_SELENDOK)
|
||||
{
|
||||
pContext = (PFORMAT_DRIVE_CONTEXT)GetWindowLongPtr(hwndDlg, DWLP_USER);
|
||||
InsertDefaultClusterSizeForFs(hwndDlg, pContext);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
BOOL
|
||||
InitializeFmifsLibrary(PFORMAT_DRIVE_CONTEXT pContext)
|
||||
{
|
||||
INITIALIZE_FMIFS InitFmifs;
|
||||
BOOLEAN ret;
|
||||
HMODULE hLibrary;
|
||||
|
||||
hLibrary = pContext->hLibrary = LoadLibraryW(L"fmifs.dll");
|
||||
if(!hLibrary)
|
||||
{
|
||||
ERR("failed to load fmifs.dll\n");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
InitFmifs = (INITIALIZE_FMIFS)GetProcAddress(hLibrary, "InitializeFmIfs");
|
||||
if (!InitFmifs)
|
||||
{
|
||||
ERR("InitializeFmIfs export is missing\n");
|
||||
FreeLibrary(hLibrary);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
ret = (*InitFmifs)(NULL, DLL_PROCESS_ATTACH, NULL);
|
||||
if (!ret)
|
||||
{
|
||||
ERR("fmifs failed to initialize\n");
|
||||
FreeLibrary(hLibrary);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
pContext->QueryAvailableFileSystemFormat = (QUERY_AVAILABLEFSFORMAT)GetProcAddress(hLibrary, "QueryAvailableFileSystemFormat");
|
||||
if (!pContext->QueryAvailableFileSystemFormat)
|
||||
{
|
||||
ERR("QueryAvailableFileSystemFormat export is missing\n");
|
||||
FreeLibrary(hLibrary);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
pContext->FormatEx = (FORMAT_EX) GetProcAddress(hLibrary, "FormatEx");
|
||||
if (!pContext->FormatEx)
|
||||
{
|
||||
ERR("FormatEx export is missing\n");
|
||||
FreeLibrary(hLibrary);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
pContext->EnableVolumeCompression = (ENABLEVOLUMECOMPRESSION) GetProcAddress(hLibrary, "EnableVolumeCompression");
|
||||
if (!pContext->FormatEx)
|
||||
{
|
||||
ERR("EnableVolumeCompression export is missing\n");
|
||||
FreeLibrary(hLibrary);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
* SHFormatDrive (SHELL32.@)
|
||||
*/
|
||||
|
||||
DWORD
|
||||
WINAPI
|
||||
SHFormatDrive(HWND hwnd, UINT drive, UINT fmtID, UINT options)
|
||||
{
|
||||
FORMAT_DRIVE_CONTEXT Context;
|
||||
int result;
|
||||
|
||||
TRACE("%p, 0x%08x, 0x%08x, 0x%08x - stub\n", hwnd, drive, fmtID, options);
|
||||
|
||||
if (!InitializeFmifsLibrary(&Context))
|
||||
{
|
||||
ERR("failed to initialize fmifs\n");
|
||||
return SHFMT_NOFORMAT;
|
||||
}
|
||||
|
||||
Context.Drive = drive;
|
||||
Context.Options = options;
|
||||
|
||||
result = DialogBoxParamW(shell32_hInstance, L"FORMAT_DLG", hwnd, FormatDriveDlg, (LPARAM)&Context);
|
||||
|
||||
FreeLibrary(Context.hLibrary);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -732,6 +732,8 @@ BEGIN
|
|||
IDS_PRINTERS "Printers"
|
||||
IDS_FONTS "Fonts"
|
||||
IDS_INSTALLNEWFONT "Install New Font..."
|
||||
|
||||
IDS_DEFAULT_CLUSTER_SIZE "Default allocation size"
|
||||
END
|
||||
|
||||
|
||||
|
|
|
@ -729,4 +729,6 @@ BEGIN
|
|||
IDS_PRINTERS "Printers"
|
||||
IDS_FONTS "Fonts"
|
||||
IDS_INSTALLNEWFONT "Install New Font..."
|
||||
|
||||
IDS_DEFAULT_CLUSTER_SIZE "Default allocation size"
|
||||
END
|
||||
|
|
|
@ -730,4 +730,6 @@ BEGIN
|
|||
IDS_PRINTERS "Printers"
|
||||
IDS_FONTS "Fonts"
|
||||
IDS_INSTALLNEWFONT "Install New Font..."
|
||||
|
||||
IDS_DEFAULT_CLUSTER_SIZE "Default allocation size"
|
||||
END
|
||||
|
|
|
@ -729,4 +729,6 @@ BEGIN
|
|||
IDS_PRINTERS "Printers"
|
||||
IDS_FONTS "Fonts"
|
||||
IDS_INSTALLNEWFONT "Install New Font..."
|
||||
|
||||
IDS_DEFAULT_CLUSTER_SIZE "Default allocation size"
|
||||
END
|
||||
|
|
|
@ -547,7 +547,7 @@ END
|
|||
|
||||
FORMAT_DLG DIALOGEX 50, 50, 184, 218
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION
|
||||
CAPTION "Formatieren"
|
||||
CAPTION "Formatieren von"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
DEFPUSHBUTTON "&Starten", IDOK, 53, 198, 60, 14
|
||||
|
@ -731,4 +731,6 @@ BEGIN
|
|||
IDS_PRINTERS "Drucker"
|
||||
IDS_FONTS "Schriftarten"
|
||||
IDS_INSTALLNEWFONT "Neue Schriftart installieren..."
|
||||
|
||||
IDS_DEFAULT_CLUSTER_SIZE "Standardgröße"
|
||||
END
|
||||
|
|
|
@ -729,4 +729,6 @@ BEGIN
|
|||
IDS_PRINTERS "Printers"
|
||||
IDS_FONTS "Fonts"
|
||||
IDS_INSTALLNEWFONT "Install New Font..."
|
||||
|
||||
IDS_DEFAULT_CLUSTER_SIZE "Default allocation size"
|
||||
END
|
||||
|
|
|
@ -729,4 +729,6 @@ BEGIN
|
|||
IDS_PRINTERS "Printers"
|
||||
IDS_FONTS "Fonts"
|
||||
IDS_INSTALLNEWFONT "Install New Font..."
|
||||
|
||||
IDS_DEFAULT_CLUSTER_SIZE "Default allocation size"
|
||||
END
|
||||
|
|
|
@ -730,4 +730,6 @@ BEGIN
|
|||
IDS_PRINTERS "Printers"
|
||||
IDS_FONTS "Fonts"
|
||||
IDS_INSTALLNEWFONT "Install New Font..."
|
||||
|
||||
IDS_DEFAULT_CLUSTER_SIZE "Default allocation size"
|
||||
END
|
||||
|
|
|
@ -731,4 +731,6 @@ BEGIN
|
|||
IDS_PRINTERS "Printers"
|
||||
IDS_FONTS "Fonts"
|
||||
IDS_INSTALLNEWFONT "Install New Font..."
|
||||
|
||||
IDS_DEFAULT_CLUSTER_SIZE "Default allocation size"
|
||||
END
|
||||
|
|
|
@ -729,4 +729,6 @@ BEGIN
|
|||
IDS_PRINTERS "Printers"
|
||||
IDS_FONTS "Fonts"
|
||||
IDS_INSTALLNEWFONT "Install New Font..."
|
||||
|
||||
IDS_DEFAULT_CLUSTER_SIZE "Default allocation size"
|
||||
END
|
||||
|
|
|
@ -733,4 +733,6 @@ BEGIN
|
|||
IDS_PRINTERS "Printers"
|
||||
IDS_FONTS "Fonts"
|
||||
IDS_INSTALLNEWFONT "Install New Font..."
|
||||
|
||||
IDS_DEFAULT_CLUSTER_SIZE "Default allocation size"
|
||||
END
|
||||
|
|
|
@ -732,4 +732,6 @@ BEGIN
|
|||
IDS_PRINTERS "Printers"
|
||||
IDS_FONTS "Fonts"
|
||||
IDS_INSTALLNEWFONT "Install New Font..."
|
||||
|
||||
IDS_DEFAULT_CLUSTER_SIZE "Default allocation size"
|
||||
END
|
||||
|
|
|
@ -730,4 +730,6 @@ BEGIN
|
|||
IDS_PRINTERS "Printers"
|
||||
IDS_FONTS "Fonts"
|
||||
IDS_INSTALLNEWFONT "Install New Font..."
|
||||
|
||||
IDS_DEFAULT_CLUSTER_SIZE "Default allocation size"
|
||||
END
|
||||
|
|
|
@ -729,4 +729,6 @@ BEGIN
|
|||
IDS_PRINTERS "Printers"
|
||||
IDS_FONTS "Fonts"
|
||||
IDS_INSTALLNEWFONT "Install New Font..."
|
||||
IDS_DEFAULT_CLUSTER_SIZE "Default allocation size"
|
||||
|
||||
END
|
||||
|
|
|
@ -729,4 +729,6 @@ BEGIN
|
|||
IDS_PRINTERS "Printers"
|
||||
IDS_FONTS "Fonts"
|
||||
IDS_INSTALLNEWFONT "Install New Font..."
|
||||
|
||||
IDS_DEFAULT_CLUSTER_SIZE "Default allocation size"
|
||||
END
|
||||
|
|
|
@ -729,4 +729,6 @@ BEGIN
|
|||
IDS_PRINTERS "Printers"
|
||||
IDS_FONTS "Fonts"
|
||||
IDS_INSTALLNEWFONT "Install New Font..."
|
||||
|
||||
IDS_DEFAULT_CLUSTER_SIZE "Default allocation size"
|
||||
END
|
||||
|
|
|
@ -707,4 +707,6 @@ BEGIN
|
|||
IDS_PRINTERS "Printers"
|
||||
IDS_FONTS "Fonts"
|
||||
IDS_INSTALLNEWFONT "Install New Font..."
|
||||
|
||||
IDS_DEFAULT_CLUSTER_SIZE "Default allocation size"
|
||||
END
|
||||
|
|
|
@ -735,4 +735,6 @@ BEGIN
|
|||
IDS_PRINTERS "Printers"
|
||||
IDS_FONTS "Fonts"
|
||||
IDS_INSTALLNEWFONT "Install New Font..."
|
||||
|
||||
IDS_DEFAULT_CLUSTER_SIZE "Default allocation size"
|
||||
END
|
||||
|
|
|
@ -731,4 +731,6 @@ BEGIN
|
|||
IDS_PRINTERS "Printers"
|
||||
IDS_FONTS "Fonts"
|
||||
IDS_INSTALLNEWFONT "Install New Font..."
|
||||
|
||||
IDS_DEFAULT_CLUSTER_SIZE "Default allocation size"
|
||||
END
|
||||
|
|
|
@ -731,4 +731,6 @@ BEGIN
|
|||
IDS_PRINTERS "Printers"
|
||||
IDS_FONTS "Fonts"
|
||||
IDS_INSTALLNEWFONT "Install New Font..."
|
||||
|
||||
IDS_DEFAULT_CLUSTER_SIZE "Default allocation size"
|
||||
END
|
||||
|
|
|
@ -727,4 +727,6 @@ BEGIN
|
|||
IDS_PRINTERS "Ïðèíòåðû"
|
||||
IDS_FONTS "Øðèôòû"
|
||||
IDS_INSTALLNEWFONT "Óñòàíîâèòü íîâûé øðèôò..."
|
||||
|
||||
IDS_DEFAULT_CLUSTER_SIZE "Default allocation size"
|
||||
END
|
||||
|
|
|
@ -735,4 +735,6 @@ BEGIN
|
|||
IDS_PRINTERS "Printers"
|
||||
IDS_FONTS "Fonts"
|
||||
IDS_INSTALLNEWFONT "Install New Font..."
|
||||
|
||||
IDS_DEFAULT_CLUSTER_SIZE "Default allocation size"
|
||||
END
|
||||
|
|
|
@ -729,4 +729,6 @@ BEGIN
|
|||
IDS_PRINTERS "Printers"
|
||||
IDS_FONTS "Fonts"
|
||||
IDS_INSTALLNEWFONT "Install New Font..."
|
||||
|
||||
IDS_DEFAULT_CLUSTER_SIZE "Default allocation size"
|
||||
END
|
||||
|
|
|
@ -729,4 +729,6 @@ BEGIN
|
|||
IDS_PRINTERS "Printers"
|
||||
IDS_FONTS "Fonts"
|
||||
IDS_INSTALLNEWFONT "Install New Font..."
|
||||
|
||||
IDS_DEFAULT_CLUSTER_SIZE "Default allocation size"
|
||||
END
|
||||
|
|
|
@ -729,4 +729,6 @@ BEGIN
|
|||
IDS_PRINTERS "Printers"
|
||||
IDS_FONTS "Fonts"
|
||||
IDS_INSTALLNEWFONT "Install New Font..."
|
||||
|
||||
IDS_DEFAULT_CLUSTER_SIZE "Default allocation size"
|
||||
END
|
||||
|
|
|
@ -730,4 +730,6 @@ BEGIN
|
|||
IDS_PRINTERS "Printers"
|
||||
IDS_FONTS "Fonts"
|
||||
IDS_INSTALLNEWFONT "Install New Font..."
|
||||
|
||||
IDS_DEFAULT_CLUSTER_SIZE "Default allocation size"
|
||||
END
|
||||
|
|
|
@ -717,5 +717,7 @@ BEGIN
|
|||
IDS_PRINTERS "Printers"
|
||||
IDS_FONTS "Fonts"
|
||||
IDS_INSTALLNEWFONT "Install New Font..."
|
||||
|
||||
IDS_DEFAULT_CLUSTER_SIZE "Default allocation size"
|
||||
END
|
||||
|
||||
|
|
|
@ -730,6 +730,9 @@ BEGIN
|
|||
IDS_PRINTERS "Printers"
|
||||
IDS_FONTS "Fonts"
|
||||
IDS_INSTALLNEWFONT "Install New Font..."
|
||||
|
||||
IDS_DEFAULT_CLUSTER_SIZE "Default allocation size"
|
||||
|
||||
END
|
||||
|
||||
#pragma code_page(default)
|
||||
|
|
|
@ -2057,13 +2057,6 @@ HRESULT WINAPI SHEmptyRecycleBinW(HWND hwnd, LPCWSTR pszRootPath, DWORD dwFlags)
|
|||
return S_OK;
|
||||
}
|
||||
|
||||
DWORD WINAPI SHFormatDrive(HWND hwnd, UINT drive, UINT fmtID, UINT options)
|
||||
{
|
||||
FIXME("%p, 0x%08x, 0x%08x, 0x%08x - stub\n", hwnd, drive, fmtID, options);
|
||||
|
||||
return SHFMT_NOFORMAT;
|
||||
}
|
||||
|
||||
HRESULT WINAPI SHQueryRecycleBinA(LPCSTR pszRootPath, LPSHQUERYRBINFO pSHQueryRBInfo)
|
||||
{
|
||||
LPWSTR szRootPathW = NULL;
|
||||
|
|
|
@ -160,6 +160,7 @@
|
|||
#define IDS_SHV_COLUMN_MODEL 322
|
||||
#define IDS_CUT 323
|
||||
#define IDS_RESTORE 324
|
||||
#define IDS_DEFAULT_CLUSTER_SIZE 325
|
||||
|
||||
/* Note: this string is referenced from the registry */
|
||||
#define IDS_RECYCLEBIN_FOLDER_NAME 8964
|
||||
|
|
Loading…
Reference in a new issue