阅读:1151回复:3
ndisuio中ndis send取消ID的计算是否有问题?
ntdisp.c
......... ......... ......... Globals.PartialCancelId = NdisGeneratePartialCancelId(); Globals.PartialCancelId <<= ((sizeof(PVOID) - 1) * 8); ......... ......... ......... *********************************************** macros.h ......... ......... ......... #define NUIO_CANCEL_ID_LOW_MASK (((ULONG_PTR)-1) >> 8) #define NUIO_GET_NEXT_CANCEL_ID() \ (PVOID)(Globals.PartialCancelId | \ ((NdisInterlockedIncrement(&Globals.LocalCancelId)) & NUIO_CANCEL_ID_LOW_MASK)) ......... ......... ......... ***************************************** 其中PartialCancelId 类型UCHAR;LocalCancelId类型ULONG NUIO_GET_NEXT_CANCEL_ID()返回值高8将全为零,PartialCancelId 没有用着。 ddk中说NdisGeneratePartialCancelId的返回值不是作为ndis send取消ID的高字节吗? |
|
沙发#
发布于:2005-07-10 08:00
哦,没有看仔细,如果是UCHAR,就是错了.应该改成ULONG
|
|
板凳#
发布于:2005-07-09 23:43
不对我上边不是写了吗
PartialCancelId类型为UCHAR 所以 Globals.PartialCancelId <<= ((sizeof(PVOID) - 1) * 8); 后 Globals.PartialCancelId为0 |
|
地板#
发布于:2005-07-08 08:09
Globals.PartialCancelId <<= ((sizeof(PVOID) - 1) * 8);
左移24位,在高8位, #define NUIO_CANCEL_ID_LOW_MASK (((ULONG_PTR)-1) >> 8) 高8位为0,为0x00ffffff #define NUIO_GET_NEXT_CANCEL_ID() \ (PVOID)(Globals.PartialCancelId | \ ((NdisInterlockedIncrement(&Globals.LocalCancelId)) & NUIO_CANCEL_ID_LOW_MASK)) 正好高8位是NdisGeneratePartialCancelId,怎么会是0呢? |
|