阅读:1963回复:3
请教64bit 平台下IO_STATIC_LOCATION结构的改变
大家好,这里请教一个关于64 bit 平台下取到的IO_STATIC_LOCATION结构与32 bit平台不一致的问题。
我的source如下: PIO_STACK_LOCATION irpSp; PKS_DATAFORMAT_VIDEOINFOHEADER pVideoInfoHeader ; irpSp = IoGetCurrentIrpStackLocation(Irp); if(irpSp->MajorFunction == IRP_MJ_CREATE) { pVideoInfoHeader = (PKS_DATAFORMAT_VIDEOINFOHEADER)((UCHAR*)(irpSp- >FileObject->FileName.Buffer) + 142); //取到InfoHeader结构后打印出宽和高度 KdPrint(("IRP_MJ_CREATE: width , height =%d,%d \n", pVideoInfoHeader->VideoInfoHeader.bmiHeader.biWidth, pVideoInfoHeader->VideoInfoHeader.bmiHeader.biHeight)); } 以上Source在32bit的XP平台下挂载驱动,运行正常,然后在64 bitXP下使用2003DDK编译后挂载,运行时取到的结构变量是错值。这里诚心请教各位有这方面经验的朋友指点一二,不胜感激 |
|
沙发#
发布于:2007-05-08 08:45
Dears,这个问题已解决,原因是由于从32 bit到64 bit环境切换后,IO_STACK_LOCATION结构发生了变化,导致FileName文件内核地址发生了改变,即需要重新右移8位已对齐
|
|
板凳#
发布于:2007-05-08 08:46
大家以后在做类似平台支持时请注意,别犯类似同样的错误
|
|
地板#
发布于:2008-09-08 12:06
重新右移8位,(PKS_DATAFORMAT_VIDEOINFOHEADER)((UCHAR*)(irpSp- >FileObject->FileName.Buffer) + 150)吗?似乎还是出错
|
|