阅读:2073回复:10
新人,一个定时器蓝屏的问题,请大家帮帮忙!
代码片段如下:
KTIMER timer; LARGE_INTEGER duetime; KDPC dpc; VOID TimerFunc( IN PVOID SystemSpecific1, IN PVOID FunctionContext, IN PVOID SystemSpecific2, IN PVOID SystemSpecific3 ); NTSTATUS DriverEntry (IN PDRIVER_OBJECT DriverObject,IN PUNICODE_STRING RegistryPath) { ... duetime.QuadPart = -1000; ASSERT(KeGetCurrentIrql() <= DISPATCH_LEVEL); KeInitializeTimer(&timer); KeInitializeDpc(&dpc, (PKDEFERRED_ROUTINE)TimerFunc, NULL); KeSetTimerEx(&timer, duetime, 6000, &dpc); ... } VOID TimerFunc( IN PVOID SystemSpecific1, IN PVOID FunctionContext, IN PVOID SystemSpecific2, IN PVOID SystemSpecific3 ) { OBJECT_ATTRIBUTES oa; UNICODE_STRING RegistryKey; UNICODE_STRING valname; WCHAR value[50]; HANDLE hkey = NULL; NTSTATUS status; KIRQL oldirql; RtlInitUnicodeString(&valname, L"HelloWin"); RtlInitUnicodeString(&RegistryKey, L"\\Registry\\Machine\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"); swprintf(value, L"D:\\vc_code\\HelloWin\\Release\\HelloWin.exe"); InitializeObjectAttributes(&oa, &RegistryKey, OBJ_CASE_INSENSITIVE, NULL, NULL); status = ZwCreateKey(&hkey, KEY_READ | KEY_WRITE, &oa, 0, NULL, REG_OPTION_NON_VOLATILE, NULL); //REG_CREATED_NEW_KEY if (NT_SUCCESS(status)) { DbgPrint("hkey: %d\n", hkey); ZwSetValueKey(hkey, &valname, 0, REG_SZ, value, sizeof(value) ); ZwClose(hkey); } // DbgPrint("hello a"); } 注册表操作在DriverEntry下没问题,在TimerFunc里蓝屏提示KMODE_EXCEPTION_NOT_HANDLED错误。 我是新手,还望大家多帮帮忙。 我的QQ:9076677,希望多交流呀 |
|
沙发#
发布于:2007-04-13 13:21
注意你的IRQL
TimerFunc在DISPATCH上 ZwCreateKey 不能使用 |
|
|
板凳#
发布于:2007-04-13 14:52
哈哈~所以需要用一个线程,用KeDelay来延时,另外验证irql
|
|
|
地板#
发布于:2007-04-14 12:48
谢谢大家!
原来是IRQL的问题,这驱动下编程还有这多屁事。 我修改了,创建了一个线程,在线程函数里面问题又来了。 我写了个死循环来做一些重复性的事情,并用KeDelayExecutionThread来延时。 但是在我Unload驱动的时候,又蓝屏了,真是惨啊,难道不能用死循环吗,那怎么做呢? |
|
地下室#
发布于:2007-04-14 21:53
我顶~~
|
|
5楼#
发布于:2007-04-15 00:16
流氓呀流氓
![]() ZwCreateKey? 我要逼所有流氓去直接读写HIVE ![]() |
|
|
6楼#
发布于:2007-04-15 08:12
引用第3楼91103581于2007-04-14 12:48发表的“”: 需要在unload的时候推出,你需要用格Event~ 嘿嘿,至于如何使用,就看你自己的啦~ |
|
|
7楼#
发布于:2007-04-15 08:45
看来这里的人还是瞒热心的哦
为什么每在发贴子的时候,我就有灵感了 其实我也想到用Event了,谢谢~~我也嘿嘿一下 还有,为什么说是流氓? 难道用注册表函数就算是流氓吗/嘿嘿. |
|
8楼#
发布于:2007-04-16 07:18
暴力写run 项,不是流氓还有谁?
![]() |
|
|
驱动小牛
![]() |
9楼#
发布于:2007-04-16 08:42
![]() |
10楼#
发布于:2007-04-16 08:58
我要是LZ,就暴力写个任意注册表键,等牛人们都说了,然后再偷偷替换成流氓行为,岂不爽哉,嘿嘿。。。。。。
![]() |
|
|