首页
社区
课程
招聘
[旧帖] [求助][求助]WinDDK编译的一个C++驱动程序没错但是没有生成.sys文件 0.00雪花
发表于: 2012-3-6 18:12 1793

[旧帖] [求助][求助]WinDDK编译的一个C++驱动程序没错但是没有生成.sys文件 0.00雪花

2012-3-6 18:12
1793
下面是我的驱动程序的代码AnsiUnicode.cpp
————————————————————————————————————————
#ifdef _cplusplus
extern "C"
{
#endif
#include <NTDDK.h>
#ifdef _cplusplus
}
#endif 

VOID TestDUnload(IN PDRIVER_OBJECT pDriverObject);
NTSTATUS TestDispatchRountine(IN PDEVICE_OBJECT pDriverObject,
								 IN PIRP pIrp);

extern "C" NTSTATUS DriverEntry( 
		IN PDRIVER_OBJECT pDriverObject,
		IN PDEVICE_OBJECT pDeviceObject)
{
	NTSTATUS status;
	
	KdPrint(("Enter DriverEntry!\n"));
	//设置派遣函数(卸载函数)
	pDriverObject->DriverUnload = TestDUnload;
	pDriverObject->MajorFunction[IRP_MJ_CREATE] = TestDispatchRountine;
	pDriverObject->MajorFunction[IRP_MJ_CLOSE] = TestDispatchRountine;
	pDriverObject->MajorFunction[IRP_MJ_WRITE] = TestDispatchRountine;
	pDriverObject->MajorFunction[IRP_MJ_READ] = TestDispatchRountine;
	
	UNICODE_STRING UnicodeString1;
	RtlInitUnicodeString(&UnicodeString1, L"Hello World");//定义Unicode字符并初始化
	
	ANSI_STRING AnsiString1;//定义一个ANSI_STRING 字符串
	status = RtlUnicodeStringToAnsiString(&AnsiString1, &UnicodeString1,TRUE);
	if(NT_SUCCESS(status))
	{
		KdPrint(("Conver successfully!\n"));
		KdPrint(("Result:%Z\n", &AnsiString1));
	}
	else
	{
		KdPrint(("Conver unsuccessfully!\n"));
	}
	
	RtlFreeAnsiString(&AnsiString1);//销毁AnsiString1
	
	//将ANSI_STRING 转换为UNICODE_STRING
	ANSI_STRING AnsiString2;
	RtlInitString(&AnsiString2, "Hello World!");
	
	UNICODE_STRING UnicodeString2;//定义UNICODE_STRING字符并进行转换
	status = RtlAnsiStringToUnicodeString(&UnicodeString2, &AnsiString2, TRUE);
	
	if(NT_SUCCESS(status))
	{
		KdPrint(("Conver successfully!\n"));
		KdPrint(("Result:%wZ\n", &UnicodeString2));
	}
	else
	{
		KdPrint(("Conver unsuccessfully!\n"));
	}
	//销毁UnicodeString
	RtlFreeUnicodeString(&UnicodeString2);

	KdPrint(("DriverEntry End!\n"));
	return status;
}

VOID  TestDUnload(IN PDRIVER_OBJECT pDriverObject)
{
	KdPrint(("Enter DriverUnload...\n"));
}

NTSTATUS TestDispatchRountine(IN PDEVICE_OBJECT pDriverObject,
								 IN PIRP pIrp)
{
	KdPrint(("Enter TestDispatchRountine!\n"));
	return STATUS_SUCCESS;
}

————————————————————————————————————————
下面是sources文件

TARGETNAME=AnsiUnicode
TARGETPATH=obj
TARGETTYPE=DRIVER

INCLUDES=$(BASEDIR)\inc;\
         $(BASEDIR)\inc\ddk;\
                 
SOURCES=AnsiUnicode.cpp
————————————————————————————————————————
makefile

!INCLUDE $(NTMAKEENV)\makefile.def

————————————————————————————————————————
不知道怎么搞的。死活编译不出来.sys文件,编译显示没有错误但是在文件夹下面只生成了一个_objects.mac文件,不明白怎么回事啊!求高人指点。。。。。。。。。

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 111
活跃值: (57)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
1.工程路径中不要有空格

2.修改你的sources
TARGETNAME=test
TARGETTYPE=DRIVER
TARGETPATH=obj
INCLUDES=$(DDK_INC_PATH)
;TARGETLIBS=$(DDK_LIB_PATH)\ntoskrnl.lib
SOURCES=test.cpp

试试看这个,我测试下编译通过
2012-3-6 21:05
0
雪    币: 111
活跃值: (57)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
不好意思
加上这句TARGETLIBS=$(DDK_LIB_PATH)\ntoskrnl.lib是可以通过的,
注释掉就编译不过,上面贴的例子加了;号
2012-3-6 21:07
0
雪    币: 238
活跃值: (55)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
4
加上这个呢
EXEENTRY=DriverEntry
我这里同样编译通过,测试加载和卸载有效

刚才又试了一下,即使不加我的也可以正常编译,看来不是这句的问题,
我猜是你那个宏定义的毛病,把那个cpp的宏定义去了试试,
再不然你把你的build输出贴上来,让大家分析分析
TARGETNAME=drv1
TARGETPATH=obj
TARGETTYPE=DRIVER
EXEENTRY=DriverEntry
SOURCES=drv1.cpp
2012-3-6 21:39
0
雪    币: 111
活跃值: (57)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
之前回帖的解决方案可能有点巧合性
今天又看了下MSDN
真正的原因在于_NT_TARGET_VERSION这个宏,
它是WDK用于判断操作系统的版本的
这个宏可以再sources或者Makefile文件中使用
WDK中makefile.def文件中的定义
_NT_TARGET_VERSION_WIN7     =0x601
_NT_TARGET_VERSION_VISTA    =0x600
_NT_TARGET_VERSION_LONGHORN =0x600
_NT_TARGET_VERSION_WS03     =0x502
_NT_TARGET_VERSION_WINXP    =0x501
_NT_TARGET_VERSION_WIN2K    =0x500

以你的demo举例:
修改sources文件
TARGETNAME=AnsiUnicode
TARGETPATH=obj
TARGETTYPE=DRIVER

_NT_TARGET_VERSION_WINXP    =0x501 //加上这一句指定目标版本

SOURCES=AnsiUnicode.cpp

或者修改makefile文件
_NT_TARGET_VERSION=0x501//加上这句或者MINIMUM_NT_TARGET_VERSION=0x501
!INCLUDE $(NTMAKEENV)\makefile.def
而且makefile还可以添加条件判断语句来判断版本

更多用法可以参考MSDN中_NT_TARGET_VERSION的介绍和WDK中的例子
2012-3-9 12:05
0
游客
登录 | 注册 方可回帖
返回
//