lmycs
驱动牛犊
驱动牛犊
  • 注册日期2001-07-23
  • 最后登录2002-12-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1667回复:9

如何在应用程序中用ntddk.h中声名的函数?

楼主#
更多 发布于:2002-06-03 17:32
我以前看到一段这样的代码,以为可以但现在编译都通不过去!
#include<windows.h>
namespace NT {

extern \"C\"{
#pragma warning(disable: 4005)
#include <ntddk.h>
#pragma warning(default:4005)
}

}
void main()
{}
不知各位有没有其他方法呢?
flyfox
驱动中牛
驱动中牛
  • 注册日期2001-04-05
  • 最后登录2012-08-03
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望22点
  • 贡献值0点
  • 好评度11点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-06-03 18:25
你看的是端口和进程相关的代码,还是看的是NT下ring3到ring0的代码,的确一般都有问题,是因为.h重复定义的问题,所以你要重新自定义ntddk.h的函数和变量,然后加windows.h就OK了
一剑西来,天外飞仙
lmycs
驱动牛犊
驱动牛犊
  • 注册日期2001-07-23
  • 最后登录2002-12-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-06-10 11:34
能告诉我如何把代码从ring3变到ring0上运行么?或相关的资料。
tigerzd
驱动老牛
驱动老牛
  • 注册日期2001-08-25
  • 最后登录2004-12-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于: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;
}
犯强汉者,虽远必诛! [img]http://www.driverdevelop.com/forum/upload/tigerzd/2002-12-13_sf10.JPG[/img]
flyfox
驱动中牛
驱动中牛
  • 注册日期2001-04-05
  • 最后登录2012-08-03
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望22点
  • 贡献值0点
  • 好评度11点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-06-10 13:57
用命名空间是很标准的方法,也可以自己定义,如
extern \"C\"
NTSYSAPI
NTSTATUS
NTAPI
ZwClose(
IN HANDLE Handle
);
当然要加#define _X86_
另外ring3变到ring0在NT下可以看webcrazy的文章,你search下
一剑西来,天外飞仙
lmycs
驱动牛犊
驱动牛犊
  • 注册日期2001-07-23
  • 最后登录2002-12-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-06-10 14:53
谢谢各位的帮助。但好象还有些问题,不过看来我还是应先看看书再问各位了。
guardee
驱动巨牛
驱动巨牛
  • 注册日期2002-11-08
  • 最后登录2010-05-29
  • 粉丝2
  • 关注1
  • 积分2分
  • 威望34点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-06-10 21:24
少了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;
}

呵呵!加上了这个还是不行的啊
tigerzd
驱动老牛
驱动老牛
  • 注册日期2001-08-25
  • 最后登录2004-12-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-06-11 13:24
怎么可能,我就编译通过了。只是不能在Ring0执行。
犯强汉者,虽远必诛! [img]http://www.driverdevelop.com/forum/upload/tigerzd/2002-12-13_sf10.JPG[/img]
tigerzd
驱动老牛
驱动老牛
  • 注册日期2001-08-25
  • 最后登录2004-12-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-06-11 13:25
是ring3 :D
犯强汉者,虽远必诛! [img]http://www.driverdevelop.com/forum/upload/tigerzd/2002-12-13_sf10.JPG[/img]
flyfox
驱动中牛
驱动中牛
  • 注册日期2001-04-05
  • 最后登录2012-08-03
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望22点
  • 贡献值0点
  • 好评度11点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2002-06-11 13:45
斑竹上面两帖什么意思?
是指你的程序本身是驱动,本身就在ring0运行,还是指你编译的从ring3切换到ring0运行??????
一剑西来,天外飞仙
游客

返回顶部