-
-
[求助]来看看 这是语法问题吗? 还是C基础不过关
-
-
[求助]来看看 这是语法问题吗? 还是C基础不过关
遇到个奇怪的问题....
先代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | unsigned int GetCrc32(PCHAR chText, int len)
{
// 生成Crc32的查询表
unsigned int Crc32Table[256];
int i, j;
unsigned int Crc;
for (i = 0; i < 256; i++){
Crc = i;
for (j = 0; j < 8; j++){
if (Crc & 1)
Crc = (Crc >> 1) ^ 0xEDB88320;
else
Crc >>= 1;
}
Crc32Table[i] = Crc;
}
// 开始计算CRC32校验值
Crc = 0xffffffff;
for (i = 0; i < (int)len; i++){
Crc = (Crc >> 8) ^ Crc32Table[(Crc & 0xFF) ^ chText[i]];
}
Crc ^= 0xFFFFFFFF;
return Crc;
}
|
那么问题来了
在用户层程序
1 2 3 4 5 6 7 | void Check()
{
ULONG64 tick = GetTickCount64();
GetCrc32((PCHAR)&tick,8); 毫无问题.
}
|
但是在驱动中. 直接
PAGE_FAULT_IN_NONPAGE_AREA 切直接忽视 try.except
但是如果把GetCrc32的参数
PCHAR chText 改成
PBYTE chText,
切调用的时候改成
GetCrc32((
PBYTE)&tick,8); 就毫无问题.
看了驱动<WINDEF.H>
typedef unsigned char BYTE;
typedef BYTE near *PBYTE;
<ntedf.h>
typedef char CHAR;
typedef CHAR *PCHAR, *LPCH, *PCH;
x64系统
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课