阅读:1739回复:0
DbgPrint打印的问题
// 这是一个IRP完成回调函数的原型
NTSTATUS c2pReadComplete(IN PDEVICE_OBJECT DeviceObject,IN PIRP Irp,IN PVOID Context) { PIO_STACK_LOCATION IrpSp; ULONG buf_len = 0; PUCHAR buf = NULL; size_t i; IrpSp = IoGetCurrentIrpStackLocation( Irp ); // 如果这个请求是成功的。很显然,如果请求失败了,这么获取进一步的信息是没意义的。 if( NT_SUCCESS( Irp->IoStatus.Status ) ) { // 获得读请求完成后输出的缓冲区 buf = Irp->AssociatedIrp.SystemBuffer; // 获得这个缓冲区的长度。一般的说返回值有多长都保存在Information中。 buf_len = Irp->IoStatus.Information; //… 这里可以做进一步的处理。我这里很简单的打印出所有的扫描码。 //for(i=0;i<buf_len;++i) //{ // DbgPrint("按键: %2x\r\n", buf); //} DbgPrint("按键: %S\n", buf); } gC2pKeyCount--; if( Irp->PendingReturned ) { IoMarkIrpPending( Irp ); } return Irp->IoStatus.Status; } 我想把buf中的内容一次打印出来,可是用DbgPrint("按键: %S\n", buf),或DbgPrint("按键: %s\n", buf)或DbgPrint("按键: %c\n", buf) ..等等都没有任何内容的呢?期待高手! |
|