阅读:1544回复:3
借问一下 在驱动中有什么好方法写文件
我想要将一些信息写入txt文件当中,
譬如一些kdprint的信息写入文件保存。有什么好方法吗? 我找到的方法 1.zwcreatefile 2.交给上一层应用程序,让上一层来作。我看tdi_fw就是这么干的。 tdi_fw里面的log_request就是将这些信息写入一个q_queue当中。 让应用程序来取的。但是q_queue里面的一个 HANDLE event_handle; PKEVENT event; 确只有setevent,没看到有waitfor的动作。 应用程序里面也没有。好奇怪。这个event不是应用程序传进驱动的。 也没看到驱动传给应用程序 |
|
|
沙发#
发布于:2007-04-18 13:06
驱动里面为什么要waitfor,做什么作用?
zwcreatefile很好使阿。只要能够达到目的就可以了 |
|
|
板凳#
发布于:2007-04-18 13:13
大哥 谢谢了
|
|
|
地板#
发布于:2007-04-18 13:22
知道你一定是个很了解tdi_fw的大人物
要不顺便再帮我回答个问题 tdi_fw里面的驱动中。有一个函数是tdi_client_irp_complete。 这是在tdi_event_receive中定下的完成函数。下面是这个函数的一部分代码 NTSTATUS tdi_client_irp_complete(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PVOID Context) { struct tdi_client_irp_ctx *ctx = (struct tdi_client_irp_ctx *)Context; NTSTATUS status; if (Irp->IoStatus.Status == STATUS_SUCCESS) { struct ot_entry *ote_conn; KIRQL irql; ote_conn = ot_find_fileobj(ctx->connobj, &irql); if (ote_conn != NULL) { ULONG bytes = Irp->IoStatus.Information; ote_conn->bytes_in += bytes; // traffic stats KeAcquireSpinLockAtDpcLevel(&g_traffic_guard); g_traffic[TRAFFIC_TOTAL_IN] += bytes; //问题在这里,我将这个bytes打印出来。绝大部分这个数值都超过1514字节。但是看程序这个字节确实是接收的字节数,这是怎么回事??? if (ote_conn->log_disconnect) g_traffic[TRAFFIC_COUNTED_IN] += bytes; KeReleaseSpinLockFromDpcLevel(&g_traffic_guard); KeReleaseSpinLock(&g_ot_hash_guard, irql); } } |
|
|