阅读:5797回复:33
(100分)各位大虾:我调用NtCreateProcess为什么提示“找不到过程地址”呢?
我在内核态想启动一个Win32进程,然后吊用了NtCreateSection,和NtCreateProcess。
当加载驱动时候,提示“找不到过程地址”。 我把NtCreateProcess注释了,就能加载了。 NtCreateSection 和 NtCreateProcess 都是 UnDoc的函数啊。 为什么NtCreateSection 能行,而NtCreateProcess 就找不到呢。 注:我连接了ntdll.lib,也声明了函数原型了。 代码如下: NTSYSAPI NTSTATUS NTAPI NtCreateSection( OUT PHANDLE SectionHandle, IN ULONG DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, IN PLARGE_INTEGER MaximumSize OPTIONAL, IN ULONG PageAttributess, IN ULONG SectionAttributes, IN HANDLE FileHandle OPTIONAL ); NTSYSAPI NTSTATUS NTAPI NtCreateProcess( OUT PHANDLE ProcessHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, IN HANDLE ParentProcess, IN BOOLEAN InheritObjectTable, IN HANDLE SectionHandle OPTIONAL, IN HANDLE DebugPort OPTIONAL, IN HANDLE ExceptionPort OPTIONAL ); int TestCreateProcess() { NTSTATUS rc; HANDLE hProcessCreated, hProcessOpened, hFile, hSection; OBJECT_ATTRIBUTES ObjectAttr; UNICODE_STRING ProcessName; UNICODE_STRING SectionName; UNICODE_STRING FileName; LARGE_INTEGER MaxSize; ULONG SectionSize=8192; IO_STATUS_BLOCK ioStatusBlock; LARGE_INTEGER allocsize ; DbgPrint(("Yanky starting TestLaunchProcess\n")); RtlInitUnicodeString(&FileName, L"\\??\\d:\\winnt\\system32\\calc.exe"); InitializeObjectAttributes( &ObjectAttr, &FileName, OBJ_CASE_INSENSITIVE, NULL, NULL); rc = ZwCreateFile( &hFile, GENERIC_READ | GENERIC_EXECUTE, &ObjectAttr, &ioStatusBlock, NULL, FILE_ATTRIBUTE_NORMAL, FILE_SHARE_READ, FILE_OPEN, 0, NULL, 0); if (!NT_SUCCESS(rc)) { DbgPrint(("Yanky -->Unable to open file, rc=%x\n", rc)); return 0; } /* then use NtCreateSection to map file */ MaxSize.HighPart=0; MaxSize.LowPart=SectionSize; rc=NtCreateSection( &hSection, SECTION_ALL_ACCESS, NULL, &MaxSize, PAGE_READWRITE, SEC_IMAGE, hFile); if (rc!=STATUS_SUCCESS) { DbgPrint(("Unable to create section, rc=%x\n", rc)); return 0; } DbgPrint(("hSectionCreated=%x\n", hSection)); rc= NtCreateProcess ( &hProcessCreated, PROCESS_ALL_ACCESS, &ObjectAttr, 0xFFFFFFFF, TRUE, hSection, NULL, NULL); if (rc!=STATUS_SUCCESS) { DbgPrint(("Unable to create process, rc=%x\n", rc)); return 0; } DbgPrint(("hProcessCreated=%x\n", hProcessCreated)); NtClose(hProcessCreated); return 1; } 各位大虾帮帮忙! |
|
最新喜欢:![]() |
沙发#
发布于:2004-12-17 21:41
编译也通过了,应该可以的,
会不会是别的问题呢 你是如何加载驱动的, 怎么看到提示“找不到过程地址”。 使用 ds的monitor吗 |
|
|
板凳#
发布于:2004-12-18 09:12
谢谢大虾关注。
能编译通过,就是加载的时候会提示:“找不到过程地址”。 我用ds的monitor加载的。 |
|
地板#
发布于:2004-12-18 09:14
顶!
自己顶! 顶! |
|
地下室#
发布于:2004-12-18 13:50
顶!。。。。。。。。。。
|
|
5楼#
发布于:2004-12-18 14:33
可能是
1. 2K和XP的原型不同? 2. 试用ZwCreateProcess或NtCreateProcessEx! |
|
6楼#
发布于:2004-12-18 14:41
可能是 连接成功就说明原型声明是对的 试试自己用程序加载,不用DS的monitor加载 也许是Monitor自己问题 另自己跟踪一下 |
|
|
7楼#
发布于:2004-12-18 17:15
我在内核态想启动一个Win32进程,然后吊用了NtCreateSection,和NtCreateProcess。 应该是可以的,除非你在系统引导过程中调用该函数 把编译后的驱动发上来看看,是否连接正确了? 或者把代码压缩发上来,我给你测试一下 |
|
|
8楼#
发布于:2004-12-19 01:51
我把代码和sys放上来了,大侠帮忙看一下吧。谢谢了。
我的运行环境是svr2000 + 2000DDK. |
|
|
9楼#
发布于:2004-12-19 14:12
各位大虾帮帮忙啊!
顶! |
|
10楼#
发布于:2004-12-19 16:22
我把代码和sys放上来了,大侠帮忙看一下吧。谢谢了。 驱动根本不能加载 |
|
|
11楼#
发布于:2004-12-19 21:04
对啊,当加载驱动时候,提示“找不到过程地址”。
但是把NtCreateProcess注释后就可以了。 大虾帮忙看看是什么问题吧。谢谢! |
|
12楼#
发布于:2004-12-20 09:25
对啊,当加载驱动时候,提示“找不到过程地址”。 你把ntdll.dll和test.sys放在一起看看 |
|
|
13楼#
发布于:2004-12-20 12:34
我试了一下,还是不行。
我觉得和这个没有太大的关系,因为我在Sources文件里已经指定了连接的文件路径了。 TARGETLIBS=$(BASEDIR)\libchk\i386\ntdll.lib 奇怪的问题是: NtCreateSection和NtCreateProcess都是undoc得函数,NtCreateSection没有问题,光NtCreateProcess有问题。 大虾帮忙分析一下吧! |
|
14楼#
发布于:2004-12-20 12:37
系统根本没导出这个函数,你如何能调用???
|
|
|
15楼#
发布于:2004-12-22 16:59
不好意思,前几天怎么都上不来论坛,不知道怎么回事。
|
|
16楼#
发布于:2004-12-22 17:02
系统根本没导出这个函数,你如何能调用??? NtCreateProcess这个函数导出了,在Ntdll.dll里面有。 ZwCreateProcess没有导出。 大虾帮忙! |
|
17楼#
发布于:2004-12-22 21:04
我试了一下,还是不行。 那个只是连接,不管Load 你可以测试看直接使用这个函数的地址看是否可以 |
|
|
18楼#
发布于:2004-12-24 12:50
我的advance Server + Sp4
在Ntdll.dll里面都导出了 NtCreateProcess ZwCreateProcess 可能你的系统版本不过高 |
|
|
19楼#
发布于:2004-12-24 12:55
使用monitor加载时出现error =127
|
|
|
上一页
下一页