在windows mobile下怎么用C#读取SD Card ID?
每次在DeviceIoControl后,就退出了。
请问是为什么?
现在的代码如下:
#region 常量定义  const uint GENERIC_READ = 0×80000000;
  const int OPEN_EXISTING = 3;
  const uint FILE_SHARE_READ = 0×00000001;
  const uint FILE_SHARE_WRITE = 0×00000002;
  const uint FILE_DEVICE_DISK = 0×00000007;
  const uint METHOD_BUFFERED = 0;
  const uint FILE_ANY_ACCESS = 0;
  const uint E_FAIL = 0×80004005;
  #endregion  #region 函数封送声明  [DllImport("coredll.dll")]
  private static extern uint CreateFile(
  string lpFileName,
  uint dwDesiredAccess,
  uint dwShareMode,
  uint lpSecurityAttributes,
  uint dwCreationDisposition,
  uint dwFlagsAndAttributes,
  uint hTemplateFile
  );  [DllImport("coredll.dll", SetLastError = true)]
  private static extern bool DeviceIoControl(
  uint hDevice,
  uint dwIoControlCode,
  uint lpInBuf /* set to 0 */,
  uint nInBufSize /* set to 0 */,
  [In, Out] byte[] lpOutBuf,
  uint nOutBufSize,
  out uint lpBytesReturned,
  uint lpOverlapped);  #endregion  #region 公有方法  public bool GetStorageCardID(ref string szIMSI)
  {
uint hDisk = CreateFile("DSK1:", GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0);  
  if ((int)hDisk == 0xFFFF)
{
  return false;
}
else
{
  Byte[] pStoreInfo = new Byte[3000];uint dwBytesRet;  uint IOCTL_DISK_GET_STORAGEID = CTL_CODE(FILE_DEVICE_DISK,0×709,METHOD_BUFFERED,FILE_ANY_ACCESS);if (!DeviceIoControl(hDisk, IOCTL_DISK_GET_STORAGEID, 0, 0, pStoreInfo, 3000, out dwBytesRet, 0))
{
//每次都进入这里
  return false;
}
else
{
  int dwSize = BitConverter.ToInt32(pStoreInfo, 0);
  int dwSerialNumOffset = BitConverter.ToInt32(pStoreInfo, 12);
  int dwSerialNumCount = dwSize – dwSerialNumOffset – 2;
  Byte[] StorageCardID = new Byte[dwSerialNumCount];
  Array.Copy(pStoreInfo,dwSerialNumOffset, StorageCardID, 0, dwSerialNumCount);
  szIMSI = Encoding.ASCII.GetString(StorageCardID, 0, dwSerialNumCount);
  return true;
}
}
  }
  #endregion  #region 私有方法  private uint CTL_CODE(uint DeviceType, uint Function, uint Method, uint Access)
  {
  return ((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method);
  }  #endregion