c# - 需要一个 C# 函数来在 .NET CF 中获取 SDCard 序列号

标签 c# .net compact-framework

我见过它是用 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/

相关文章:

c# - C# 中的 Azure Function v3 出现问题

c# - XmlSerializer 用问号替换非 ASCII 字符 '?'

compact-framework - 处理SandcaSTLe和Compact Framework项目

c# - 无法将类型为 'System.Data.DataRowView' 的对象转换为类型 'System.Data.DataRow'

c# - 为什么关闭标签显示在 View 中?

c# - 使用简单注入(inject)器,是否可以通过其实现类型获取单例?

c# - 使用.NET将多个ogg vorbis文件顺序连接到一个文件中?

c# - 在 IIS 7.5 上对 WebApi 服务的 HttpClient 调用 - 404 未找到

Windows CE 上的 C# .NET 3.5 CF,更改 DataGrid 中的行背景颜色

c# - 使用 C# Express 版本的 Compact Framework 开发