阅读:2226回复:4
ULONGULONG 是怎么回事?
在WINDOWS WDM 设备驱动程序开发指南的WDM1例子的dispatch.cpp文件中,函数Wdm1Write中有个文件指针FilePointer:
LONGLONG FilePointer = IrpStack- >Parameters.Write.ByteOffset.QuadPart; 其中的LONGLONG 怎么解释?为什么下面又变成了 (ULONG)FilePointer if( ((ULONG)FilePointer)+WriteLen>BufferSize) 另外我在有的地方看到有ULONGULONG 是怎么回事?谁帮我解释一下。 ( ((ULONG)FilePointer)+WriteLen>BufferSize) 此语句的BufferSizeif的类型是ULONG,FilePointer是指针,它们怎么进行比较呢? [yxj727 编辑于 2001-05-27 14:05] |
|
沙发#
发布于:2001-05-27 12:04
LONGLONG FilePointer = IrpStack- >Parameters.Write.ByteOffset.QuadPart;
是一个 64位的指针,(系统要求的),它要求寻址4G (2**64=4G??) 一般情况下,有32位就够了,所以就ULONG啦! |
|
板凳#
发布于:2001-05-28 10:27
[QUOTE]原本由 yxj727 发表
[B]( ((ULONG)FilePointer)+WriteLen>BufferSize) 此语句的BufferSizeif的类型是ULONG,FilePointer是指针,它们怎么进行比较呢? [/B][/QUOTE] FilePointer真的是一个指针吗?如果是指针的话,那就应该是这样的了 LONGLONG* FilePointer = IrpStack- >Parameters.Write.ByteOffset.QuadPart; 所以,FilePointer应该是一个数,不是一个指向LONGLONG的指针,当然可以比较啦!只不过这里的比较只是比较了低32bit |
|
|
地板#
发布于:2001-05-29 02:20
只是一个概念上的指针,其实是指示文件读写指针相对文件开头
的位置,所以是一个int64的整数,我是这么理解的,不过我不明白 为什么每次readfile和writefile时,它都是0呢?怎么让它不从0 开始读写呢? |
|
地下室#
发布于:2001-05-29 18:52
[QUOTE]原本由 dgxu 发表
[B]只是一个概念上的指针,其实是指示文件读写指针相对文件开头 的位置,所以是一个int64的整数,我是这么理解的,不过我不明白 为什么每次readfile和writefile时,它都是0呢?怎么让它不从0 开始读写呢? [/B][/QUOTE] 我记得有一些设备不支持readfile和writefile,不知道是不是这个原因。 |
|
|