26#define IDS_LIST_COLUMN_FIRST IDS_PARTITION_NAME
27#define IDS_LIST_COLUMN_LAST IDS_PARTITION_STATUS
29#define MAX_LIST_COLUMNS (IDS_LIST_COLUMN_LAST - IDS_LIST_COLUMN_FIRST + 1)
48 for (pch1 = pch2 = pszSanitized; *pch1; ++pch1)
75 LPWSTR pszText, pszSanitized;
93 pszSanitized =
_wcsdup(pszText);
131#if (_WIN32_WINNT < _WIN32_WINNT_VISTA)
134 balloon.
ttiIcon = TTI_ERROR_LARGE;
162 if (
wParam == UNICODE_NOCHAR)
233 INT iItem, iCurrent =
CB_ERR, iDefault = 0;
251 bIsBIOS = ((pSetupData->USetupData.ArchType ==
ARCH_PcAT) ||
270 if (uBldrLoc == pSetupData->USetupData.BootLoaderLocation)
333 uBldrLoc =
min(
max(uBldrLoc, 0), 3);
406 if (!PartCreateCtx->ForceFormat)
420 ASSERT(PartCreateCtx->PartItem->Volume == PartCreateCtx->PartItem->PartEntry->Volume);
421 Volume = PartCreateCtx->PartItem->PartEntry->Volume;
422 VolCreate = PartCreateCtx->PartItem->VolCreate;
486 PPARTITEM PartItem = PartCreateCtx->PartItem;
525 DPRINT1(
"Failed to allocate volume-create structure\n");
577 PartCreateCtx->ForceFormat =
TRUE;
634 PartEntry = PartCreateCtx->PartItem->PartEntry;
638 MaxSizeMB = PartCreateCtx->MaxSizeMB;
723 IN const INT* pColsWidth,
724 IN const INT* pColsAlign,
733 tlC.pszText = szText;
736 for (
i = 0;
i < nNumOfColumns;
i++)
739 tlC.cx = pColsWidth[
i];
740 tlC.fmt = pColsAlign[
i];
767 Insert.hParent = hParent;
768 Insert.hInsertAfter = (hInsertAfter ? hInsertAfter :
TVI_LAST);
769 Insert.item.pszText = (
LPWSTR)lpText;
770 Insert.item.iImage = iImage;
771 Insert.item.iSelectedImage = iSelectedImage;
772 Insert.item.lParam =
lParam;
789 tlItem.hItem =
hItem;
793 return tlItem.lParam;
808 if (!hParentItem || !PartItem)
828 if (PartItem && phItem)
878 "Extended Partition" );
884 &PartEntry->PartitionType);
895 if ((
cchBuffer > 0) && (*strBuffer ==
'\0'))
900 PartEntry->PartitionType);
912 if (DiskSize >= 10 *
GB)
936 if (PartSize >= 10 *
GB)
943 if (PartSize >= 10 *
MB)
966 PVOLINFO VolInfo = (PartEntry->Volume ? &PartEntry->Volume->Info :
NULL);
970 CHAR PartTypeString[32];
972 WCHAR LineBuffer[128];
975 if (PartEntry->IsPartitioned ==
FALSE)
980 L"Unpartitioned space");
992 L"Extended Partition");
1009 DPRINT1(
"Failed to allocate partition-info structure\n");
1015 PartItem->
Volume = PartEntry->Volume;
1022 if (PartEntry->IsPartitioned)
1024 PartTypeString[0] =
'\0';
1096 if (PartEntry->IsPartitioned)
1100 PartEntry->BootIndicator ?
L"Active" :
L"");
1114 LogicalEntry = LogicalEntry->
Flink)
1145 if (!hParentItem || !PartItem)
1168 WCHAR LineBuffer[128];
1173 L"\\\\.\\PhysicalDrive%lu",
1174 DiskEntry->DiskNumber);
1215 if (DiskName && *DiskName)
1217 if (DiskEntry->DriverName.Length > 0)
1221 L"Harddisk %lu (%S) (Port=%hu, Bus=%hu, Id=%hu) on %wZ",
1222 DiskEntry->DiskNumber,
1227 &DiskEntry->DriverName);
1233 L"Harddisk %lu (%S) (Port=%hu, Bus=%hu, Id=%hu)",
1234 DiskEntry->DiskNumber,
1243 if (DiskEntry->DriverName.Length > 0)
1247 L"Harddisk %lu (Port=%hu, Bus=%hu, Id=%hu) on %wZ",
1248 DiskEntry->DiskNumber,
1252 &DiskEntry->DriverName);
1258 L"Harddisk %lu (Port=%hu, Bus=%hu, Id=%hu)",
1259 DiskEntry->DiskNumber,
1290 for (PrimaryEntry = DiskEntry->PrimaryPartListHead.
Flink;
1291 PrimaryEntry != &DiskEntry->PrimaryPartListHead;
1292 PrimaryEntry = PrimaryEntry->
Flink)
1470 *pPartItem = PartItem;
1500 BOOLEAN PrevIsPartitioned, NextIsPartitioned;
1545 if (PrevPart && !PrevIsPartitioned)
1558 if (NextPart && !NextIsPartitioned)
1725 if (PartSize == MaxSizeMB)
1726 PartSize = MaxPartSize;
1730 ASSERT(PartSize <= MaxPartSize);
1808 if (PartEntry == PartEntry->
DiskEntry->ExtendedPartition)
1864 DiskEntry->
DiskStyle == PARTITION_STYLE_RAW);
1879 goto DisableWizNext;
1894 if (!PartEntry->IsPartitioned)
1938 if ((PartEntry->IsPartitioned && PartEntry->Volume) ||
1947 goto DisableWizNext;
2036 L"The disk you have selected for installing ReactOS\n"
2037 L"is not visible by the firmware of your computer,\n"
2038 L"and so may not be bootable.\n"
2039 L"\nClick on OK to continue anyway."
2040 L"\nClick on CANCEL to go back to the partitions list.");
2059 L"Could not create a partition on the selected disk region");
2091 if (!IsPartitionLargeEnough(PartEntry))
static HWND hWndList[5+1]
BOOL Query(LPCTSTR *ServiceArgs, DWORD ArgCount, BOOL bExtended)
PCSTR NTAPI LookupPartitionTypeString(_In_ PARTITION_STYLE PartitionStyle, _In_ PVOID PartitionType)
PPARTENTRY InstallPartition
INT __cdecl DisplayMessage(_In_opt_ HWND hWnd, _In_ UINT uType, _In_opt_ PCWSTR pszTitle, _In_opt_ PCWSTR pszFormatMessage,...)
#define ShowDlgItem(hDlg, nID, nCmdShow)
struct _SETUPDATA * PSETUPDATA
#define IDC_CHECK_MBREXTPART
#define IDS_BOOTLOADER_MBRVBR
#define IDS_BOOTLOADER_SYSTEM
#define IDS_WARN_DELETE_PARTITION
#define IDS_ERROR_INVALID_INSTALLDIR_CHAR
#define IDS_ERROR_CREATE_PARTITION_TITLE
#define IDC_CHECK_QUICKFMT
#define IDS_WARN_DELETE_PARTITION_TITLE
#define IDS_ERROR_CREATE_PARTITION
#define IDS_BOOTLOADER_VBRONLY
#define IDS_ERROR_DIRECTORY_NAME_TITLE
#define IDC_UPDOWN_PARTSIZE
#define IDS_WARN_DELETE_MBR_EXTENDED_PARTITION
#define IDS_ERROR_DIRECTORY_NAME
#define IDS_ERROR_INVALID_INSTALLDIR_CHAR_TITLE
#define IDS_BOOTLOADER_NOINST
#define IDS_VOLUME_NOFORMAT
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)
BOOL WINAPI ImageList_Destroy(HIMAGELIST himl)
HIMAGELIST WINAPI ImageList_Create(INT cx, INT cy, UINT flags, INT cInitial, INT cGrow)
static const WCHAR Description[]
#define INVALID_HANDLE_VALUE
#define MultiByteToWideChar
_ACRTIMP int __cdecl _wcsicmp(const wchar_t *, const wchar_t *)
_ACRTIMP size_t __cdecl wcslen(const wchar_t *)
_ACRTIMP wchar_t *__cdecl _wcsdup(const wchar_t *) __WINE_DEALLOC(free) __WINE_MALLOC
_ACRTIMP size_t __cdecl strlen(const char *)
LPWSTR WINAPI StrFormatByteSizeW(LONGLONG llBytes, LPWSTR lpszDest, UINT cchMax)
static VOID ShowErrorTip(_In_ HWND hEdit)
static VOID InitPartitionList(_In_ HINSTANCE hInstance, _In_ HWND hWndList)
static const INT column_widths[MAX_LIST_COLUMNS]
static BOOL DoSanitizeClipboard(_In_ HWND hWnd)
Sanitize in-place any text found in the clipboard.
struct _PARTITEM * PPARTITEM
static BOOLEAN DoDeletePartition(_In_ HWND hList, _In_ PPARTLIST List, _Inout_ HTLITEM *phItem, _In_ PPARTITEM PartItem)
Delete the selected partition in the partition list, and update the partition list UI.
LPARAM TreeListGetItemData(_In_ HWND hTreeList, _In_ HTLITEM hItem)
static const INT column_alignment[MAX_LIST_COLUMNS]
PVOL_CREATE_INFO FindVolCreateInTreeByVolume(_In_ HWND hTreeList, _In_ PVOLENTRY Volume)
INT_PTR CALLBACK DriveDlgProc(_In_ HWND hwndDlg, _In_ UINT uMsg, _In_ WPARAM wParam, _In_ LPARAM lParam)
static INT_PTR CALLBACK PartitionDlgProc(_In_ HWND hDlg, _In_ UINT uMsg, _In_ WPARAM wParam, _In_ LPARAM lParam)
static VOID PrettifySize1(_Inout_ PULONGLONG Size, _Out_ PCWSTR *Unit)
VOID GetPartitionTypeString(IN PPARTENTRY PartEntry, OUT PSTR strBuffer, IN ULONG cchBuffer)
static PPARTITEM GetItemPartition(_In_ HWND hTreeList, _In_ HTLITEM hItem)
static BOOLEAN DoCreatePartition(_In_ HWND hList, _In_ PPARTLIST List, _Inout_ HTLITEM *phItem, _Inout_opt_ PPARTITEM *pPartItem, _In_opt_ ULONGLONG SizeBytes, _In_opt_ ULONG_PTR PartitionInfo)
Create a partition in the selected disk region in the partition list, and update the partition list U...
#define IDS_LIST_COLUMN_FIRST
static BOOL DoSanitizeText(_Inout_ PWSTR pszSanitized)
Sanitize a given string in-place, by removing any invalid character found in it.
static PPARTITEM GetSelectedPartition(_In_ HWND hTreeList, _Out_opt_ HTLITEM *phItem)
static INT_PTR CALLBACK FormatDlgProcWorker(_In_ PPARTCREATE_CTX PartCreateCtx, _In_ HWND hDlg, _In_ UINT uMsg, _In_ WPARAM wParam, _In_ LPARAM lParam)
static HTLITEM PrintPartitionData(_In_ HWND hWndList, _In_ HTLITEM htiParent, _In_opt_ HTLITEM hInsertAfter, _In_ PPARTENTRY PartEntry)
static INT_PTR CALLBACK FormatDlgProc(_In_ HWND hDlg, _In_ UINT uMsg, _In_ WPARAM wParam, _In_ LPARAM lParam)
HTLITEM TreeListAddItem(_In_ HWND hTreeList, _In_opt_ HTLITEM hParent, _In_opt_ HTLITEM hInsertAfter, _In_ LPCWSTR lpText, _In_ INT iImage, _In_ INT iSelectedImage, _In_ LPARAM lParam)
struct _PARTITEM PARTITEM
Data structure stored for each partition item in the TreeList. (None for disks items....
static VOID DrawPartitionList(_In_ HWND hWndList, _In_ PPARTLIST List)
static INT_PTR CALLBACK MoreOptDlgProc(_In_ HWND hDlg, _In_ UINT uMsg, _In_ WPARAM wParam, _In_ LPARAM lParam)
BOOL CreateTreeListColumns(IN HINSTANCE hInstance, IN HWND hWndTreeList, IN const UINT *pIDs, IN const INT *pColsWidth, IN const INT *pColsAlign, IN UINT nNumOfColumns)
static VOID CleanupPartitionList(_In_ HWND hWndList)
struct _PARTCREATE_CTX * PPARTCREATE_CTX
struct _PARTCREATE_CTX PARTCREATE_CTX
Dialog context structure used by PartitionDlgProc() and FormatDlgProc(Worker)().
static VOID PrintDiskData(_In_ HWND hWndList, _In_opt_ HTLITEM hInsertAfter, _In_ PDISKENTRY DiskEntry)
static VOID DeleteTreeItem(_In_ HWND hWndList, _In_ TLITEMW *ptlItem)
Called on response to the TVN_DELETEITEM notification sent by the TreeList.
static const UINT column_ids[MAX_LIST_COLUMNS]
static LRESULT CALLBACK InstallDirEditProc(_In_ HWND hWnd, _In_ UINT uMsg, _In_ WPARAM wParam, _In_ LPARAM lParam)
Subclass edit window procedure to filter allowed characters for the ReactOS installation directory.
static VOID PrettifySize2(_Inout_ PULONGLONG Size, _Out_ PCWSTR *Unit)
@ ERROR_INSUFFICIENT_PARTITION_SIZE
#define EnableDlgItem(hDlg, nID, bEnable)
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
BOOL NTAPI GlobalUnlock(HGLOBAL hMem)
HLOCAL NTAPI LocalAlloc(UINT uFlags, SIZE_T dwBytes)
HGLOBAL NTAPI GlobalAlloc(UINT uFlags, SIZE_T dwBytes)
HLOCAL NTAPI LocalFree(HLOCAL hMem)
static ERESOURCE GlobalLock
#define GetDiskSizeInBytes(DiskEntry)
#define GetPartEntrySizeInBytes(PartEntry)
struct _DISKENTRY * PDISKENTRY
VOID DisplayError(DWORD dwError)
TCHAR szTitle[MAX_LOADSTRING]
__GNU_EXTENSION typedef unsigned __int64 * PULONGLONG
#define DBG_UNREFERENCED_PARAMETER(P)
#define IsContainerPartition(PartitionType)
_In_ ULONG _In_ ULONG _In_ ULONG Length
#define PARTITION_ENTRY_UNUSED
#define PARTITION_EXTENDED
#define PropSheet_SetWizButtons(d, f)
#define PSN_QUERYINITIALFOCUS
#define PropSheet_SetCurSelByID(d, i)
#define Edit_ShowBalloonTip(hwnd, peditballoontip)
#define TVS_SHOWSELALWAYS
#define TVS_FULLROWSELECT
#define ImageList_AddIcon(himl, hicon)
#define TVIF_SELECTEDIMAGE
#define IOCTL_STORAGE_QUERY_PROPERTY
_In_opt_ _In_opt_ _In_ _In_ DWORD cbData
BOOLEAN NTAPI GetRegisteredFileSystems(IN ULONG Index, OUT PCWSTR *FileSystemName)
ERROR_NUMBER NTAPI PartitionCreateChecks(_In_ PPARTENTRY PartEntry, _In_opt_ ULONGLONG SizeBytes, _In_opt_ ULONG_PTR PartitionInfo)
ULONGLONG RoundingDivide(IN ULONGLONG Dividend, IN ULONGLONG Divisor)
PPARTENTRY NTAPI GetAdjUnpartitionedEntry(_In_ PPARTENTRY PartEntry, _In_ BOOLEAN Direction)
Retrieves, if any, the unpartitioned disk region that is adjacent (next or previous) to the specified...
BOOLEAN NTAPI CreatePartition(_In_ PPARTLIST List, _Inout_ PPARTENTRY PartEntry, _In_opt_ ULONGLONG SizeBytes, _In_opt_ ULONG_PTR PartitionInfo)
BOOLEAN NTAPI DeletePartition(_In_ PPARTLIST List, _In_ PPARTENTRY PartEntry, _Out_opt_ PPARTENTRY *FreeRegion)
BOOLEAN NTAPI IsValidInstallDirectory(_In_ PCWSTR InstallDir)
Verify whether the given directory is suitable for ReactOS installation. Each path component must be ...
#define IS_VALID_INSTALL_PATH_CHAR(c)
Defines the class of characters valid for the installation directory.
STRSAFEAPI StringCchPrintfW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszFormat,...)
STRSAFEAPI StringCchCopyW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc)
STRSAFEAPI StringCchCopyA(STRSAFE_LPSTR pszDest, size_t cchDest, STRSAFE_LPCSTR pszSrc)
STRSAFEAPI StringCchPrintfA(STRSAFE_LPSTR pszDest, size_t cchDest, STRSAFE_LPCSTR pszFormat,...)
PPARTENTRY ExtendedPartition
LIST_ENTRY LogicalPartListHead
PARTITION_STYLE DiskStyle
struct _LIST_ENTRY * Flink
Dialog context structure used by PartitionDlgProc() and FormatDlgProc(Worker)().
struct _DISKENTRY * DiskEntry
Data structure stored for each partition item in the TreeList. (None for disks items....
PVOL_CREATE_INFO VolCreate
WCHAR InstallationDirectory[MAX_PATH]
ULONG RequiredPartitionDiskSpace
WCHAR FileSystem[MAX_PATH+1]
WCHAR VolumeLabel[MAXIMUM_VOLUME_LABEL_LENGTH/sizeof(WCHAR)+1]
Volume label, NUL-terminated.
Data structure stored when a partition/volume needs to be formatted.
WCHAR FileSystemName[MAX_PATH+1]
FMIFS_MEDIA_FLAG MediaFlag
#define TreeList_GetNextItem(h, i, c)
#define TreeList_DeleteAllItems(h)
#define TreeList_Expand(h, i, c)
#define TreeList_GetNextSibling(h, i)
#define TreeList_SetColor(h, i, c)
#define TreeList_InsertColumn(h, i, p)
#define TreeList_GetPrevSibling(h, i)
#define TreeList_GetSelection(h)
#define TreeList_SetExtendedStyle(h, d)
#define TreeList_SetItemText(hwndLV, hItem_, iSubItem_, pszText_)
#define TreeList_GetImageList(h, i)
#define TreeList_SetStyle(h, d)
#define TreeList_GetParent(h, i)
#define TVS_EX_FULLROWMARK
#define TreeList_DeleteItem(h, i)
#define TreeList_InsertItem(h, p)
#define TreeList_GetStyle(h)
#define TreeList_SelectItem(h, i)
#define TreeList_GetItem(h, p)
#define TreeList_SetImageList(h, l, i)
#define CONTAINING_RECORD(address, type, field)
VOID __cdecl MUIDisplayError(IN ULONG ErrorNum, OUT PINPUT_RECORD Ir, IN ULONG WaitEvent,...)
PCSTR MUIGetString(ULONG Number)
#define STRING_FORMATUNKNOWN
static USETUP_DATA USetupData
#define POPUP_WAIT_ANY_KEY
_In_ WDFCOLLECTION _In_ ULONG Index
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
_Must_inspect_result_ _In_ WDFCMRESLIST List
int WINAPI GetWindowTextW(HWND hWnd, LPWSTR lpString, int nMaxCount)
struct _STORAGE_DEVICE_DESCRIPTOR * PSTORAGE_DEVICE_DESCRIPTOR
DWORD WINAPI GetSysColor(_In_ int)
#define GetWindowLongPtrW
BOOL WINAPI CheckDlgButton(_In_ HWND, _In_ int, _In_ UINT)
HANDLE WINAPI SetClipboardData(_In_ UINT, _In_opt_ HANDLE)
BOOL WINAPI CloseClipboard(void)
BOOL WINAPI OpenClipboard(_In_opt_ HWND)
#define CB_FINDSTRINGEXACT
BOOL WINAPI MessageBeep(_In_ UINT uType)
HANDLE WINAPI GetClipboardData(_In_ UINT)
HWND WINAPI GetDlgItem(_In_opt_ HWND, _In_ int)
LRESULT WINAPI SendDlgItemMessageW(_In_ HWND, _In_ int, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
BOOL WINAPI SetWindowTextW(_In_ HWND, _In_opt_ LPCWSTR)
UINT WINAPI IsDlgButtonChecked(_In_ HWND, _In_ int)
BOOL WINAPI IsWindowUnicode(_In_ HWND)
struct tagNMHDR * LPNMHDR
int WINAPI GetWindowTextLengthW(_In_ HWND)
HWND WINAPI GetParent(_In_ HWND)
#define MAKEINTRESOURCEW(i)
LRESULT(CALLBACK * WNDPROC)(HWND, UINT, WPARAM, LPARAM)
#define SetWindowLongPtrW
LRESULT WINAPI CallWindowProcW(_In_ WNDPROC, _In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
HICON WINAPI LoadIconW(_In_opt_ HINSTANCE hInstance, _In_ LPCWSTR lpIconName)
int WINAPI GetSystemMetrics(_In_ int)
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
INT_PTR WINAPI DialogBoxParamW(_In_opt_ HINSTANCE, _In_ LPCWSTR, _In_opt_ HWND, _In_opt_ DLGPROC, _In_ LPARAM)
BOOL WINAPI EndDialog(_In_ HWND, _In_ INT_PTR)
_In_ ULONG _In_ struct _SET_PARTITION_INFORMATION_EX * PartitionInfo