C# 改写VC代码

wolf_Knight 2011-01-04 02:26:44
请哪位大侠帮忙用C#改写一下VC代码(环境Wince)

unsigned char* GetStorageID(LPCTSTR szDisk)
{
BYTE *SerialNo ;
HANDLE hDisk = CreateFile(szDisk ,GENERIC_READ,FILE_SHARE_READ | FILE_SHARE_WRITE , NULL , OPEN_EXISTING , 0 , NULL);
PSTORAGE_IDENTIFICATION pStoreInfo = (PSTORAGE_IDENTIFICATION) new BYTE[3000];
DWORD dwBytesRet;
if(!DeviceIoControl(hDisk , IOCTL_DISK_GET_STORAGEID, NULL , 0 , pStoreInfo , 3000 , &dwBytesRet , NULL))
{
DWORD err = GetLastError();
delete [] pStoreInfo;
CloseHandle(hDisk);
return FALSE;
}
else
{
SerialNo = (((BYTE *)pStoreInfo) + pStoreInfo->dwManufactureIDOffset);

}
CloseHandle(hDisk);
return SerialNo;
}

#define IOCTL_DISK_GET_STORAGEID CTL_CODE(FILE_DEVICE_DISK, 0x709,METHOD_BUFFERED,FILE_ANY_ACCESS)
typedef struct _STORAGE_IDENTIFICATION
{
DWORD dwSize;
DWORD dwFlags;
DWORD dwManufactureIDOffset;
DWORD dwSerialNumOffset;
} STORAGE_IDENTIFICATION, *PSTORAGE_IDENTIFICATION;
...全文
203 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
wolf_Knight 2011-01-20
  • 打赏
  • 举报
回复
这个 GetStorageID 函数,是用来获取SD卡序列号的,我是不知道函数下面几个地方不知道怎么改写

PSTORAGE_IDENTIFICATION pStoreInfo = (PSTORAGE_IDENTIFICATION) new BYTE[3000];
DWORD dwBytesRet;
if(!DeviceIoControl(hDisk , IOCTL_DISK_GET_STORAGEID, NULL , 0 , pStoreInfo , 3000 , &dwBytesRet , NULL))
{
DWORD err = GetLastError();
delete [] pStoreInfo;
CloseHandle(hDisk);
return FALSE;
}
else
{
SerialNo = (((BYTE *)pStoreInfo) + pStoreInfo->dwManufactureIDOffset);

}
CloseHandle(hDisk);
return SerialNo;



另外这个API我是这样定义的,也不知道对不


[DllImport("coredll.dll", EntryPoint = "DeviceIoControl", SetLastError = true)]
internal static extern int DeviceIoControlCE(
int hDevice,
UInt64 dwIoControlCode,
byte[] lpInBuffer,
int nInBufferSize,
byte[] lpOutBuffer,
int nOutBufferSize,
ref int lpBytesReturned,
IntPtr lpOverlapped);
wolf_Knight 2011-01-20
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 bdmh 的回复:]
太多不明确的地方,写一点给你,自己完成吧

C# code

[DllImport("kernel32.dll ", EntryPoint = "CreateFile ")]
public static extern int CreateFile(
string lpFileName,
int dwDesiredAcce……
[/Quote]

兄弟,谢谢,API函数,我都知道。
wolf_Knight 2011-01-20
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 liuyilin888 的回复:]
C# code

using System;

public class GlobalMembers
{
public static byte GetStorageID(string szDisk)
{
byte SerialNo = 0;
IntPtr hDisk = CreateFile(szDisk,GENERIC_READ,……
[/Quote]

兄弟,好像不行啊
bdmh 2011-01-20
  • 打赏
  • 举报
回复
太多不明确的地方,写一点给你,自己完成吧

[DllImport("kernel32.dll ", EntryPoint = "CreateFile ")]
public static extern int CreateFile(
string lpFileName,
int dwDesiredAccess,
int dwShareMode,
IntPtr lpSecurityAttributes,
int dwCreationDisposition,
int dwFlagsAndAttributes,
int hTemplateFile
);

uint GENERIC_READ = (uint)0x80000000;
uint GENERIC_WRITE = 0x40000000;
int FILE_SHARE_READ = 0x00000001;
int FILE_SHARE_WRITE = 0x00000002;
int OPEN_EXISTING = 3;
//CreateFile可以按下面用
SafeHandle hDisk = CreateFile(szDisk, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, null, OPEN_EXISTING, 0, null);
liuyilin888 2011-01-20
  • 打赏
  • 举报
回复

using System;

public class GlobalMembers
{
public static byte GetStorageID(string szDisk)
{
byte SerialNo = 0;
IntPtr hDisk = CreateFile(szDisk,GENERIC_READ,FILE_SHARE_READ | FILE_SHARE_WRITE, null, OPEN_EXISTING, 0, null);
_STORAGE_IDENTIFICATION[] pStoreInfo = (_STORAGE_IDENTIFICATION)(new byte[3000]);
uint dwBytesRet = 0;
if (! (DeviceIoControl(hDisk, IOCTL_DISK_GET_STORAGEID, null, 0, pStoreInfo, 3000, dwBytesRet, null)))
{
uint err = GetLastError();
pStoreInfo = null;
CloseHandle(hDisk);
return 0;
}
else
{
SerialNo = ((Convert.ToByte(pStoreInfo)) + pStoreInfo.dwManufactureIDOffset);

}
CloseHandle(hDisk);
return SerialNo;
}
}

#define IOCTL_DISK_GET_STORAGEID
public class _STORAGE_IDENTIFICATION
{
public uint dwSize;
public uint dwFlags;
public uint dwManufactureIDOffset;
public uint dwSerialNumOffset;
}
shangwei97 2011-01-20
  • 打赏
  • 举报
回复
没调试这段代码,看大概意思,你是从wince的文件中读取一个类似SN号的东西吗
你既然知道是要得到什么东西,可以直接用C#去实现这段代码,何必去改写。
改写的时间,你都可以直接把上面代码封装成动态库去调用了
wolf_Knight 2011-01-20
  • 打赏
  • 举报
回复
哪位兄弟帮帮忙看看
jiewei915 2011-01-05
  • 打赏
  • 举报
回复
.......................
这个让人非常无解
mjp1234airen4385 2011-01-05
  • 打赏
  • 举报
回复
太郁闷了。
有要引入多个windowsapi,还要定义结构和常量,
不愿意整
wolf_Knight 2011-01-05
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 jiewei915 的回复:]
.......................
这个让人非常无解
[/Quote]


什么意思?没有看明白吗?

111,120

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧