我见过它是用 C++ 编写的,但我不知道。我需要一个在 .NET CF 中返回 SDCard 序列号的 C# 函数。谁能帮我用它写一个函数?
最佳答案
首先,我要说的是,如果您购买 SDF(50 美元),您将获得此功能的源代码,然后您可以将其引入您的项目并进行混淆处理。
但是,如果您的时间比金钱多,并且想自己实现,我可以为您指明正确的方向。我留给你将所有这些部分串在一起,但这里是步骤:
首先,您必须像这样打开卷:
IntPtr hFile = NativeMethods.CreateFile(
string.Format("{0}\\Vol:", driveName),
NativeMethods.GENERIC_READ, 0, 0, NativeMethods.OPEN_EXISTING, 0, 0);
这为您提供了驱动器的句柄。然后,您只需调用 IOCTL 即可获取存储 ID:
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 的二进制表示结构体。请注意,该结构实际上只是对数据 header 的描述。它包含实际序列号数据的偏移量,这是一个 ASCII 字符串。提取它看起来像这样:
int snoffset = BitConverter.ToInt32(data, 12);
string sn = Encoding.ASCII.GetString(data, snoffset, data.Length - snoffset);
return sn.TrimEnd(new char[] { '\0' });
关于c# - 需要一个 C# 函数来在 .NET CF 中获取 SDCard 序列号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3203280/