阅读:1624回复:4
SystemBuffer的问题
我在应用程序里面写了一个字符串到Irp->AssociatedIrp.SystemBuffer里面,现在想在驱动里面将这个字符串拿出来,并且要获得这个字符串的长度,怎么做啊?
very thanks!!!!!!!!!!! |
|
|
驱动小牛
![]() |
沙发#
发布于:2008-04-24 16:23
这么一个好贴,躲在这了,挖出来
|
板凳#
发布于:2002-10-20 14:16
犯了一个错误,正确代码应该如下:
如是用WriteFile写入,则可以这样获得: PIO_STACK_LOCATION pThisSP; pThisSp = IoGetCurrentIrpStackLocation( pIrp ); ULONG nSize = pThisSp ->Parameters.Write.Length; PVOID pBuffer = pIrp->AssociatedIrp.SystemBuffer; 然后,你以可以把字符串拷到驱动程序本地了。 PVOID pString = ExAllocatePool( NonPagedPool, nSize ); if( !pString ) return FALSE; RtlZeroMemory( pString, nSize ); RtlCopyMmoery( pString, pBuffer, nSize ); |
|
|
地板#
发布于:2002-10-20 14:07
我在应用程序里面写了一个字符串到Irp->AssociatedIrp.SystemBuffer里面,现在想在驱动里面将这个字符串拿出来,并且要获得这个字符串的长度,怎么做啊? 你是怎么写进去的? WriteFile ? /DeviceIoControl ? 无论如何写进去的,在API调用中,都需要设置输入的长度,这个长度可以从传入参数中的相关字段中获得 如是用WriteFile写入,则可以这样获得: PIO_STACK_LOCATION pThisSP; pThisSp = IoGetCurrentIrpStackLocation( pIrp ); ULONG nSize = pThisSp ->Parameters.Write.Length; PVOID pBuffer = pIrp->AssociatedIrp.SystemBuffer; 然后,你以可以把字符串拷到驱动程序本地了。 CHAR String[MAX_PATH]; RtlZeroMemory( String, nSize ); RtlCopyMemory( String, pBuffer, nSize ); //搞定 如果是用DeviceIoControl, 则参照DeviceIoControl的相关调用规范来解析。 |
|
|
地下室#
发布于:2002-10-20 00:24
应用程序里怎么写一个字符串到systembuffer里啊,再说systembuffer是一个指针,如果使用writefile,or deviceiocontrol的话,首先就要确定字符长度啊。
不懂。 |
|