当前位置: 操作系统/服务器>windows
本页文章导读:
▪xp下hook IofCallDriver出错解决办法 xp下hook IofCallDriver出错先向将要帮助我的人表示感谢.问题是这样的:我根据《天书夜读》上的思路做了一个xp下hook IofCallDriver的小程序,当总是出错,用WinDbg单步调试时,最终的蓝屏代码为DRI.........
▪ netstat -a 中的foreign address 和 local address 含义是什么?解决思路 netstat -a 中的foreign address 和 local address 含义是什么?netstat -a 中的foreign address 和 local address 含义是什么? :前是计算机名,:后表示端口吗?foreign address 外部地址 local addre.........
▪ 打开WORD文档时出现提示:“对话框打开时命令无法执行.该怎么解决 打开WORD文档时出现提示:“对话框打开时命令无法执行......最近双击word文档老是出现:"对话框打开时命令无法执行。单击"确定",然后关闭对话框以继续"的提示(如下图), 觉得很奇怪,到.........
[1]xp下hook IofCallDriver出错解决办法
来源: 互联网 发布时间: 2014-02-18
xp下hook IofCallDriver出错
先向将要帮助我的人表示感谢.
问题是这样的:我根据《天书夜读》上的思路做了一个xp下hook IofCallDriver的小程序,当总是出错,用WinDbg单步调试时,最终的蓝屏代码为DRIVER_IRQL_NOT_LESS_OR_EQUAL,另外当不调试直接在OS中运行时,最终蓝屏代码为PAGE_FAULT_IN_NONPAGED
下面是关键的代码
C/C++ code
先向将要帮助我的人表示感谢.
问题是这样的:我根据《天书夜读》上的思路做了一个xp下hook IofCallDriver的小程序,当总是出错,用WinDbg单步调试时,最终的蓝屏代码为DRIVER_IRQL_NOT_LESS_OR_EQUAL,另外当不调试直接在OS中运行时,最终蓝屏代码为PAGE_FAULT_IN_NONPAGED
下面是关键的代码
C/C++ code
//driver.h typedef PCHAR PBYTE; //不想在一个一个替换了,so... typedef NTSTATUS (__fastcall *PIOFCALLDRIVER)(PDEVICE_OBJECT,PIRP); typedef struct _DEVICE_EXTENSION { PDEVICE_OBJECT pDevice; UNICODE_STRING ustrDeviceName; //设备名称 UNICODE_STRING ustrSymLinkName; //符号链接名 PIOFCALLDRIVER nativerIofCallDriver; //保存系统的IofCallDriver的地址 } DEVICE_EXTENSION, *PDEVICE_EXTENSION; //driver.cpp #include "Driver.h" ULONG g_uCR0; //保存我们修改CRP寄存器之前的它的值 KSPIN_LOCK SDTSpinLock; NTSTATUS FASTCALL MyIofCallDriver(IN PDEVICE_OBJECT,IN OUT PIRP); //我们的IofCallDriver; PIOFCALLDRIVER HookIofCallDriver(IN PIOFCALLDRIVER, IN BOOLEAN ); //Hook IofCallDriver or unhook VOID WPOFF(); // VOID WPON(); // #pragma PAGEDCODE VOID WPOFF() { ULONG uAttr; _asm { push eax; mov eax, cr0; mov uAttr, eax; and eax, 0FFFEFFFFh; // CR0 16 BIT = 0 mov cr0, eax; pop eax; cli }; g_uCR0=uAttr; } VOID WPON() { _asm { sti push eax; mov eax, g_uCR0; //恢復原有 CR0 屬性 mov cr0, eax; pop eax; }; } #pragma PAGEDCODE NTSTATUS FASTCALL MyIofCallDriver(IN PDEVICE_OBJECT pDevObj,IN OUT PIRP pIrp) { DbgPrint("HDM:This is MyIofCallDriver! You succeed!\n"); PDEVICE_EXTENSION pdx=(PDEVICE_EXTENSION)pDevObj->DeviceExtension; return (*(pdx->nativerIofCallDriver))(pDevObj,pIrp); } #pragma PAGEDCODE // //当hookOrUnhook为TRUE时,IofCallDriver为我们的替换函数的地址 //当hookOrUnhook为FALSE时,则为系统IofCallDriver的地址 //无论是hook or unhook,当函数成功时,返回系统IofCallDriver的地址,否则返回NULL PIOFCALLDRIVER HookIofCallDriver(IN PIOFCALLDRIVER IofCallDriver, IN BOOLEAN hookOrUnhook) { DbgPrint("HDM:Enter HookIofCallDriver\n"); UNICODE_STRING functionName; PBYTE address=NULL; //通过调用MmGetSystemRoutineAddress得到的IofCallDriver的入口地址 PBYTE nativeIofCallDriver=NULL; //IofCallDriver执行体的地址 RtlInitUnicodeString(&functionName,L"IofCallDriver"); //得到IofCallDriver的入口地址 address=(PBYTE)MmGetSystemRoutineAddress(&functionName); if (address==NULL) { return NULL; } if (hookOrUnhook) { //通过反汇编可知,将上面得到的地址加两字节地址就是系统的IofCallDriver执行体的地址 nativeIofCallDriver=(PBYTE)(*(PLONG)(address+2)); KIRQL OldIrql; KeAcquireSpinLock( &SDTSpinLock, &OldIrql ); WPOFF(); InterlockedExchange((PLONG)(address+2),(LONG)IofCallDriver); WPON(); KeReleaseSpinLock( &SDTSpinLock, OldIrql ); } else { if (IofCallDriver) { KIRQL OldIrql; KeAcquireSpinLock( &SDTSpinLock, &OldIrql ); WPOFF(); InterlockedExchange((PLONG)(address+2),(LONG)IofCallDriver); WPON(); KeReleaseSpinLock( &SDTSpinLock, OldIrql ); nativeIofCallDriver=(PBYTE)IofCallDriver; } else { return NULL; } } DbgPrint("HDM:Leave HookIofCallDriver\n"); return (PIOFCALLDRIVER)nativeIofCallDriver; } #pragma INITCODE NTSTATUS CreateDevice ( IN PDRIVER_OBJECT pDriverObject) { NTSTATUS status=STATUS_SUCCESS; PDEVICE_OBJECT pDevObj; PDEVICE_EXTENSION pDevExt; //创建设备名称 UNICODE_STRING devName; RtlInitUnicodeString(&devName,L"\\Device\\XPHookIofCallDriver"); //创建设备 status = IoCreateDevice( pDriverObject, sizeof(DEVICE_EXTENSION), &(UNICODE_STRING)devName, FILE_DEVICE_UNKNOWN, 0, TRUE, &pDevObj ); if (!NT_SUCCESS(status)) return status; pDevObj->Flags |= DO_BUFFERED_IO; pDevExt = (PDEVICE_EXTENSION)pDevObj->DeviceExtension; pDevExt->pDevice = pDevObj; pDevExt->ustrDeviceName = devName; //创建符号链接 UNICODE_STRING symLinkName; RtlInitUnicodeString(&symLinkName,L"\\??\\XPHookIofCallDriver"); pDevExt->ustrSymLinkName = symLinkName; status = IoCreateSymbolicLink( &symLinkName,&devName ); if (!NT_SUCCESS(status)) { IoDeleteDevice( pDevObj ); return status; } pDevExt->nativerIofCallDriver=HookIofCallDriver(MyIofCallDriver,TRUE); if (pDevExt->nativerIofCallDriver==NULL) { IoDeleteDevice(pDevObj); IoDeleteSymbolicLink(&symLinkName); status=STATUS_UNSUCCESSFUL; } return status; }
[2] netstat -a 中的foreign address 和 local address 含义是什么?解决思路
来源: 互联网 发布时间: 2014-02-18
netstat -a 中的foreign address 和 local address 含义是什么?
netstat -a 中的foreign address 和 local address 含义是什么?
:前是计算机名,:后表示端口吗?
foreign address 外部地址
local address 本地地址
Proto :协议(TCP/UDP)
Local Address :本地地址:端口
Foreign Address:外部地址:端口
State: 内部地址与外部地址的连接状态
1. 连接 Establishment
客户端发送Tcp的SYN 消息包含服务器的端口和客户初始序列号码到服务器.
服务器发送回自己 SYN 和 ACK (由客户 ISN + 1)。
客户端发送一个 ACK (由服务器 ISN + 1)。
2.指明 SYN_SEND 活动打开。
只 SYN_RECEIVED 服务器从客户端收到 SYN。
ESTABLISHED 客户接收服务器 SYN 和建立会话。
LISTEN 服务器已准备好接受连接。
那就是本地进程调用本地服务呀。
netstat -a 中的foreign address 和 local address 含义是什么?
:前是计算机名,:后表示端口吗?
foreign address 外部地址
local address 本地地址
Proto :协议(TCP/UDP)
Local Address :本地地址:端口
Foreign Address:外部地址:端口
State: 内部地址与外部地址的连接状态
1. 连接 Establishment
客户端发送Tcp的SYN 消息包含服务器的端口和客户初始序列号码到服务器.
服务器发送回自己 SYN 和 ACK (由客户 ISN + 1)。
客户端发送一个 ACK (由服务器 ISN + 1)。
2.指明 SYN_SEND 活动打开。
只 SYN_RECEIVED 服务器从客户端收到 SYN。
ESTABLISHED 客户接收服务器 SYN 和建立会话。
LISTEN 服务器已准备好接受连接。
那就是本地进程调用本地服务呀。
[3] 打开WORD文档时出现提示:“对话框打开时命令无法执行.该怎么解决
来源: 互联网 发布时间: 2014-02-18
打开WORD文档时出现提示:“对话框打开时命令无法执行......
最近双击word文档老是出现:"对话框打开时命令无法执行。单击"确定",然后关闭对话框以继续"的提示(如下图),
觉得很奇怪,到网上搜了一下,发现问题是杀毒软件对office2003支持不好的原因(只有安装了OFFICE2003才有此现象),我的就是安装的office2003。出现对话框的原因是:在杀毒软件的选项中,启用了office插件的保护功能,去掉选项,打开word文件时就不会出现这个对话框。
一、如果你安装的是诺顿
具体的解决方法是:
右键点击右下角的图标,选择 "配置Norton Antivirus"
在弹出的对话框内找到"杂项"选项
如果在"启用Office插件"前面有对号的话,将它点掉,确定退出后就ok了
二、如果你安装的是瑞星
具体的解决方法是:
设置—>详细设置—>嵌入式杀毒,去掉"使用Office/IE嵌入式杀毒"前的勾即可。
或设置"其他设置"中,将"使用office/IE安全助手"前面的勾取消就能解决问题。
三、Microsoft解释:
症状:
如果通过双击一个文档(例如,在 Microsoft Windows 资源管理器中)来在 Microsoft Office Word 2003 中打开该文档,则会收到下面的错误信息:The command cannot be performed because a dialog box is open.Click "OK" and then close open dialog boxes to continue.在 Microsoft Word 2002 中不会收到这一错误信息。
原因:
如果 Startup 文件夹中有一个 Word 2003 模板,该模板中包含能打开对话框的自动执行 (autoexec) 宏,则可能发生此问题。
替代方法
方法 1:
在 Word 中打开要在 Word 中直接打开文档,请按下列步骤操作:
1. 启动 Word 2003。
2. 在"文件"菜单上,单击"打开"。
3. 在"打开"对话框中,选择要打开的文档,然后单击"打开"。
方法 2:
从 Startup 文件夹中删除模板,要从 Startup 文件夹中删除模板,请按下列步骤操作:
1. 退出 Word 2003。
2. 单击"开始",指向"程序",指向"附件",然后单击"Windows 资源管理器"。
3. 找出下列二个文件夹之一:
Documents and Settings\username\Application Data\Microsoft\Word\Startup
Program Files\Microsoft Office\Office11\Startup
4. 双击以打开"Startup"文件夹。
5. 在 Windows 资源管理器的右窗格中,单击以选择要删除的模板,然后按 Delete 键。
现在病毒越来越多了,真的要想办法解决他们!
最近双击word文档老是出现:"对话框打开时命令无法执行。单击"确定",然后关闭对话框以继续"的提示(如下图),
觉得很奇怪,到网上搜了一下,发现问题是杀毒软件对office2003支持不好的原因(只有安装了OFFICE2003才有此现象),我的就是安装的office2003。出现对话框的原因是:在杀毒软件的选项中,启用了office插件的保护功能,去掉选项,打开word文件时就不会出现这个对话框。
一、如果你安装的是诺顿
具体的解决方法是:
右键点击右下角的图标,选择 "配置Norton Antivirus"
在弹出的对话框内找到"杂项"选项
如果在"启用Office插件"前面有对号的话,将它点掉,确定退出后就ok了
二、如果你安装的是瑞星
具体的解决方法是:
设置—>详细设置—>嵌入式杀毒,去掉"使用Office/IE嵌入式杀毒"前的勾即可。
或设置"其他设置"中,将"使用office/IE安全助手"前面的勾取消就能解决问题。
三、Microsoft解释:
症状:
如果通过双击一个文档(例如,在 Microsoft Windows 资源管理器中)来在 Microsoft Office Word 2003 中打开该文档,则会收到下面的错误信息:The command cannot be performed because a dialog box is open.Click "OK" and then close open dialog boxes to continue.在 Microsoft Word 2002 中不会收到这一错误信息。
原因:
如果 Startup 文件夹中有一个 Word 2003 模板,该模板中包含能打开对话框的自动执行 (autoexec) 宏,则可能发生此问题。
替代方法
方法 1:
在 Word 中打开要在 Word 中直接打开文档,请按下列步骤操作:
1. 启动 Word 2003。
2. 在"文件"菜单上,单击"打开"。
3. 在"打开"对话框中,选择要打开的文档,然后单击"打开"。
方法 2:
从 Startup 文件夹中删除模板,要从 Startup 文件夹中删除模板,请按下列步骤操作:
1. 退出 Word 2003。
2. 单击"开始",指向"程序",指向"附件",然后单击"Windows 资源管理器"。
3. 找出下列二个文件夹之一:
Documents and Settings\username\Application Data\Microsoft\Word\Startup
Program Files\Microsoft Office\Office11\Startup
4. 双击以打开"Startup"文件夹。
5. 在 Windows 资源管理器的右窗格中,单击以选择要删除的模板,然后按 Delete 键。
现在病毒越来越多了,真的要想办法解决他们!
最新技术文章: