当前位置: 操作系统/服务器>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 键。
现在病毒越来越多了,真的要想办法解决他们!
最新技术文章: