当前位置:编程学习 > C#/ASP.NET >>

各位,哪位帮忙给看一下这个问题,C#读SDID

在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 

--------------------编程问答-------------------- 不了解,明年可能也做类似东西,学习来了。 --------------------编程问答--------------------
 引用 1楼 liuqian4243 的回复:
不了解,明年可能也做类似东西,学习来了。

我也没搞过Mobile的东东~~~[align=center]*************************************************
本内容使用CSDN小秘书回复
每天回帖即可得10分可用分!
*************************************************[/align] --------------------编程问答-------------------- 不好意思~没有看懂意思~不知道有谁能来加下注释的说= =! --------------------编程问答--------------------
引用楼主 krislinxue 的回复:
在windows mobile下怎么用C#读取SD Card ID?
每次在DeviceIoControl后,就退出了。
请问是为什么?
现在的代码如下:
#region 常量定义

  const uint GENERIC_READ = 0×80000000;
  const int OPEN_EXISTING = 3;
  const uint FILE_SHARE_READ ……


windows mobile 
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,