Нужна функция C # для получения серийного SDCard в .NET CF - PullRequest
4 голосов
/ 08 июля 2010

Я видел, что написано на C ++, чего я не знаю.Мне нужна функция C #, которая возвращает серийный номер SDCard в .NET CF.Может ли кто-нибудь помочь мне написать функцию с ним?

Ответы [ 2 ]

3 голосов
/ 08 июля 2010

Во-первых, я скажу, что если вы купите SDF ($ 50), вы получите исходный код для этой функции, который вы могли бы затем вставить в свой проект и запутать.

Если, однако, у вас больше времени, чем денег, и вы хотите реализовать это самостоятельно, я могу указать вам верное направление. Я оставляю вам возможность связать все эти части вместе, но вот шаги:

Во-первых, вы должны открыть том следующим образом:

IntPtr hFile = NativeMethods.CreateFile(
      string.Format("{0}\\Vol:", driveName), 
      NativeMethods.GENERIC_READ, 0, 0, NativeMethods.OPEN_EXISTING, 0, 0);

Это дает вам управление приводом. Затем вы просто вызываете IOCTL, чтобы получить идентификатор хранилища:

byte[] data = new byte[512];
int returned;
int result = NativeMethods.DeviceIoControl(
             hFile, IOCTL_DISK_GET_STORAGEID, IntPtr.Zero, 0, 
             data, data.Length, out returned, IntPtr.Zero);
if (result != 0)
{
    m_storageID = STORAGE_IDENTIFICATION.FromBytes(data);
}

Это дает вам двоичное представление STORAGE_IDENTIFICATION структуры. Обратите внимание, что структура на самом деле является только описанием заголовка данных. Он содержит смещение фактических данных серийного номера, которое является строкой ASCII. Извлечение выглядит примерно так:

int snoffset = BitConverter.ToInt32(data, 12);

string sn = Encoding.ASCII.GetString(data, snoffset, data.Length - snoffset);
return sn.TrimEnd(new char[] { '\0' });
1 голос
/ 08 июля 2010

Каркас интеллектуального устройства позволит вам сделать это:

foreach(var info in DriveInfo.GetDrives())
{
   string manufacturer = info.ManufacturerID ?? "[Not available]");
   string serial = info.SerialNumber ?? "[Not available]");
}

См. здесь .Я задал тот же вопрос сам в прошлом году.

...