ListEntry = ListEntry->Flink;
}
+ ASSERT(Index <= 4);
+
/* Update the logical partition table */
Index = 4;
ListEntry = DiskEntry->LogicalPartListHead.Flink;
return NULL;
}
-VOID
+BOOLEAN
CreatePrimaryPartition(
IN PPARTLIST List,
IN ULONGLONG SectorCount,
IN BOOLEAN AutoCreate)
{
+ ERROR_NUMBER Error;
PDISKENTRY DiskEntry;
PPARTENTRY PartEntry;
PPARTENTRY NewPartEntry;
if (List == NULL ||
List->CurrentDisk == NULL ||
List->CurrentPartition == NULL ||
- List->CurrentPartition->IsPartitioned != FALSE)
+ List->CurrentPartition->IsPartitioned)
{
- return;
+ return FALSE;
+ }
+
+ Error = PrimaryPartitionCreationChecks(List);
+ if (Error != NOT_AN_ERROR)
+ {
+ DPRINT1("PrimaryPartitionCreationChecks() failed with error %lu\n", Error);
+ return FALSE;
}
DiskEntry = List->CurrentDisk;
HEAP_ZERO_MEMORY,
sizeof(PARTENTRY));
if (NewPartEntry == NULL)
- return;
+ return FALSE;
/* Insert the new entry into the list */
InsertTailList(&PartEntry->ListEntry,
DiskEntry->Dirty = TRUE;
AssignDriveLetters(List);
+
+ return TRUE;
}
static
&NewPartEntry->ListEntry);
}
-VOID
+BOOLEAN
CreateExtendedPartition(
IN PPARTLIST List,
IN ULONGLONG SectorCount)
{
+ ERROR_NUMBER Error;
PDISKENTRY DiskEntry;
PPARTENTRY PartEntry;
PPARTENTRY NewPartEntry;
if (List == NULL ||
List->CurrentDisk == NULL ||
List->CurrentPartition == NULL ||
- List->CurrentPartition->IsPartitioned != FALSE)
+ List->CurrentPartition->IsPartitioned)
{
- return;
+ return FALSE;
+ }
+
+ Error = ExtendedPartitionCreationChecks(List);
+ if (Error != NOT_AN_ERROR)
+ {
+ DPRINT1("ExtendedPartitionCreationChecks() failed with error %lu\n", Error);
+ return FALSE;
}
DiskEntry = List->CurrentDisk;
HEAP_ZERO_MEMORY,
sizeof(PARTENTRY));
if (NewPartEntry == NULL)
- return;
+ return FALSE;
/* Insert the new entry into the list */
InsertTailList(&PartEntry->ListEntry,
DiskEntry->Dirty = TRUE;
AssignDriveLetters(List);
+
+ return TRUE;
}
-VOID
+BOOLEAN
CreateLogicalPartition(
IN PPARTLIST List,
IN ULONGLONG SectorCount,
IN BOOLEAN AutoCreate)
{
+ ERROR_NUMBER Error;
PDISKENTRY DiskEntry;
PPARTENTRY PartEntry;
PPARTENTRY NewPartEntry;
if (List == NULL ||
List->CurrentDisk == NULL ||
List->CurrentPartition == NULL ||
- List->CurrentPartition->IsPartitioned != FALSE)
+ List->CurrentPartition->IsPartitioned)
{
- return;
+ return FALSE;
+ }
+
+ Error = LogicalPartitionCreationChecks(List);
+ if (Error != NOT_AN_ERROR)
+ {
+ DPRINT1("LogicalPartitionCreationChecks() failed with error %lu\n", Error);
+ return FALSE;
}
DiskEntry = List->CurrentDisk;
HEAP_ZERO_MEMORY,
sizeof(PARTENTRY));
if (NewPartEntry == NULL)
- return;
+ return FALSE;
/* Insert the new entry into the list */
InsertTailList(&PartEntry->ListEntry,
DiskEntry->Dirty = TRUE;
AssignDriveLetters(List);
+
+ return TRUE;
}
VOID
PartEntry = List->CurrentPartition;
/* Fail if the partition is already in use */
- if (PartEntry->IsPartitioned != FALSE)
+ if (PartEntry->IsPartitioned)
return ERROR_NEW_PARTITION;
/* Fail if there are already 4 primary partitions in the list */
PartEntry = List->CurrentPartition;
/* Fail if the partition is already in use */
- if (PartEntry->IsPartitioned != FALSE)
+ if (PartEntry->IsPartitioned)
return ERROR_NEW_PARTITION;
/* Fail if there are already 4 primary partitions in the list */
PartEntry = List->CurrentPartition;
/* Fail if the partition is already in use */
- if (PartEntry->IsPartitioned != FALSE)
+ if (PartEntry->IsPartitioned)
return ERROR_NEW_PARTITION;
return ERROR_SUCCESS;
{
if (PartitionList->CurrentPartition->LogicalPartition)
{
+ Error = LogicalPartitionCreationChecks(PartitionList);
+ if (Error != NOT_AN_ERROR)
+ {
+ MUIDisplayError(Error, Ir, POPUP_WAIT_ANY_KEY);
+ return SELECT_PARTITION_PAGE;
+ }
+
CreateLogicalPartition(PartitionList,
0ULL,
TRUE);
}
else
{
+ Error = PrimaryPartitionCreationChecks(PartitionList);
+ if (Error != NOT_AN_ERROR)
+ {
+ MUIDisplayError(Error, Ir, POPUP_WAIT_ANY_KEY);
+ return SELECT_PARTITION_PAGE;
+ }
+
CreatePrimaryPartition(PartitionList,
0ULL,
TRUE);
* QuitPage
*
* SIDEEFFECTS
- * Sets PartEntry->DiskEntry->LayoutBuffer->PartitionEntry[PartEntry->PartitionIndex].PartitionType (via UpdatePartitionType)
+ * Calls UpdatePartitionType()
* Calls CheckActiveSystemPartition()
*
* RETURNS