2015-01-27 5 views
0

Я использую следующий код для создания разделов в USB-накопителе.C# эквивалентный код для ZeroMemory

char str[128]; 
    wsprintf(str,"\\\\.\\PhysicalDrive%d", i); 
hDevice = CreateFile(,"\\\\.\\PhysicalDrive1", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); 

LARGE_INTEGER dimDiscoD; 
LARGE_INTEGER dimDiscoE; 
LARGE_INTEGER dimDiscoF; 
LARGE_INTEGER dimDiscoG; 
DISK_GEOMETRY_EX pDiskGeometryEx; 

DWORD dwBytesReturned; 
BOOL r = DeviceIoControl(hDevice, IOCTL_DISK_GET_DRIVE_GEOMETRY_EX, NULL, 0, &pDiskGeometryEx, sizeof(pDiskGeometryEx), &dwBytesReturned, NULL); 

dimDiscoG.QuadPart = DIM_DISCOG; 
dimDiscoD.QuadPart = ((pDiskGeometryEx.DiskSize.QuadPart - dimDiscoG.QuadPart)/6) * 4; 
dimDiscoE.QuadPart = dimDiscoD.QuadPart/4; 
dimDiscoF.QuadPart = dimDiscoE.QuadPart; 

CREATE_DISK pCreateDisk; 
ZeroMemory(&pCreateDisk,sizeof(CREATE_DISK)); 

DWORD dwBytesReturned; 
pCreateDisk.PartitionStyle = PARTITION_STYLE_MBR; 
pCreateDisk.Mbr.Signature = 0xA4B57310; 

DeviceIoControl(hDevice, IOCTL_DISK_CREATE_DISK, (LPVOID)&pCreateDisk, sizeof(pCreateDisk), NULL, 0, &dwBytesReturned, (LPOVERLAPPED) NULL) 

DWORD junk1; 

DeviceIoControl(hDevice,IOCTL_DISK_UPDATE_PROPERTIES, NULL, 0, NULL, 0, &junk1, NULL); 

int SectorSize=pDiskGeometryEx.Geometry.BytesPerSector; 

DWORD szNewLayout = sizeof(DRIVE_LAYOUT_INFORMATION_EX)+4*sizeof (PARTITION_INFORMATION_EX); 
DRIVE_LAYOUT_INFORMATION_EX *dl = (DRIVE_LAYOUT_INFORMATION_EX*) new BYTE[szNewLayout]; 
ZeroMemory(dl,szNewLayout); 

...................

dl->PartitionStyle = PARTITION_STYLE_MBR; 
dl->PartitionCount = 4;// specify AT LEAST 4 partitions!!! 
dl->Mbr.Signature = 0xA4B57310; // 

DeviceIoControl(hDevice, IOCTL_DISK_SET_DRIVE_LAYOUT_EX, dl, szNewLayout, NULL, 0, &junk, (LPOVERLAPPED) NULL)) 

DWORD junk; 
DeviceIoControl(hDevice, IOCTL_DISK_UPDATE_PROPERTIES, NULL, 0, NULL, 0, &junk, NULL); 

CloseHandle(hDevice); 
delete dl; 

Я преобразования выше код в C#. как я могу преобразовать следующую строку в C#? ZeroMemory (& pCreateDisk, sizeof (CREATE_DISK));

+0

Не могли бы вы помочь в преобразовании следующей строки в C#? DRIVE_LAYOUT_INFORMATION_EX dl = (DRIVE_LAYOUT_INFORMATION_EX) новый BYTE [szNewLayout]; –

+0

Посмотрите на это https://stackoverflow.com/questions/1407715/how-to-quickly-zero-out-an-array –

ответ

6

Вам не нужно использовать ZeroMemory в C#; все байт-массивы, которые вы выделяете, неявно обнуляются, потому что нуль является значением по умолчанию для всех интегральных типов (а также Guid, что, по-видимому, косвенно связано здесь).