阅读:1667回复:9
如何在应用程序中用ntddk.h中声名的函数?
我以前看到一段这样的代码,以为可以但现在编译都通不过去!
#include<windows.h> namespace NT { extern \"C\"{ #pragma warning(disable: 4005) #include <ntddk.h> #pragma warning(default:4005) } } void main() {} 不知各位有没有其他方法呢? |
|
沙发#
发布于:2002-06-03 18:25
你看的是端口和进程相关的代码,还是看的是NT下ring3到ring0的代码,的确一般都有问题,是因为.h重复定义的问题,所以你要重新自定义ntddk.h的函数和变量,然后加windows.h就OK了
|
|
|
板凳#
发布于:2002-06-10 11:34
能告诉我如何把代码从ring3变到ring0上运行么?或相关的资料。
|
|
地板#
发布于:2002-06-10 13:09
少了using NT::NTSTATUS;具体代码如下:
#include <windows.h> namespace NT{ extern \"C\"{ #pragma warning(disable:4005) #include <wdm.h> #pragma warning(default:4005) } } using NT::NTSTATUS; int main(int argc, char* argv[]) { PUCHAR Buffer; Buffer = (PUCHAR)NT::ExAllocatePool (NT::PagedPool,100); NT::ExFreePool(Buffer); return 0; } |
|
|
地下室#
发布于:2002-06-10 13:57
用命名空间是很标准的方法,也可以自己定义,如
extern \"C\" NTSYSAPI NTSTATUS NTAPI ZwClose( IN HANDLE Handle ); 当然要加#define _X86_ 另外ring3变到ring0在NT下可以看webcrazy的文章,你search下 |
|
|
5楼#
发布于:2002-06-10 14:53
谢谢各位的帮助。但好象还有些问题,不过看来我还是应先看看书再问各位了。
|
|
6楼#
发布于:2002-06-10 21:24
少了using NT::NTSTATUS;具体代码如下: 呵呵!加上了这个还是不行的啊 |
|
7楼#
发布于:2002-06-11 13:24
怎么可能,我就编译通过了。只是不能在Ring0执行。
|
|
|
8楼#
发布于:2002-06-11 13:25
是ring3 :D
|
|
|
9楼#
发布于:2002-06-11 13:45
斑竹上面两帖什么意思?
是指你的程序本身是驱动,本身就在ring0运行,还是指你编译的从ring3切换到ring0运行?????? |
|
|