一段程序开始如下
........................
typedef DWORD (__stdcall *PFNNTQUERYSYSTEMINFORMATION) (DWORD, PVOID, DWORD, PDWORD);
typedef PVOID (__stdcall *PFNRTLCREATEQUERYDEBUGBUFFER) (DWORD, DWORD);
typedef DWORD (__stdcall *PFNRTLQUERYPROCESSDEBUGINFORMATION) (DWORD, DWORD, PVOID);
typedef void (__stdcall *PFNRTLDESTROYQUERYDEBUGBUFFER) (PVOID);
typedef void (__stdcall *PFNTRTLRUNDECODEUNICODESTRING) (BYTE, PUNICODE_STRING);PFNNTQUERYSYSTEMINFORMATION pfnNtQuerySystemInformation;
PFNRTLCREATEQUERYDEBUGBUFFER pfnRtlCreateQueryDebugBuffer;
PFNRTLQUERYPROCESSDEBUGINFORMATION pfnRtlQueryProcessDebugInformation;
PFNRTLDESTROYQUERYDEBUGBUFFER pfnRtlDestroyQueryDebugBuffer;
PFNTRTLRUNDECODEUNICODESTRING pfnRtlRunDecodeUnicodeString;
............................ _asm
{
mov AL,10
mov DL,70
// out al,dl
// mov dx,71
// in high,dx
}
HINSTANCE hNtDll = LoadLibrary("NTDLL.DLL");
pfnNtQuerySystemInformation =(PFNNTQUERYSYSTEMINFORMATION) GetProcAddress
(hNtDll,
"NtQuerySystemInformation");
pfnRtlCreateQueryDebugBuffer =(PFNRTLCREATEQUERYDEBUGBUFFER)GetProcAddress( hNtDll,"RtlCreateQueryDebugBuffer");pfnRtlQueryProcessDebugInformation = (PFNRTLQUERYPROCESSDEBUGINFORMATION) GetProcAddress(hNtDll,"RtlQueryProcessDebugInformation");pfnRtlDestroyQueryDebugBuffer =(PFNRTLDESTROYQUERYDEBUGBUFFER) GetProcAddress(hNtDll,"RtlDestroyQueryDebugBuffer");
pfnRtlRunDecodeUnicodeString =(PFNTRTLRUNDECODEUNICODESTRING) GetProcAddress (hNtDll,"RtlRunDecodeUnicodeString");
.......................................................
这段程序
1.typedef DWORD (__stdcall *PFNNTQUERYSYSTEMINFORMATION) (DWORD, PVOID, DWORD, PDWORD);
.....................................................
typedef void (__stdcall *PFNRTLDESTROYQUERYDEBUGBUFFER) (PVOID);
向程序这样定义有什么作用啊
2.程序中间有段汇编起什么作用啊!
3.NTDLL.DLL这个动态库有什么作用啊!
4.pfnNtQuerySystemInformation =(PFNNTQUERYSYSTEMINFORMATION) GetProcAddress(hNtDll,"NtQuerySystemInformation");
后面连续几句这种语句又有什么作用啊!我不太明白啊!
一连串这么多问题只有这么点分真的不好意思,本人最近很穷,如果那位认为分数少问题解决我会再加!先谢谢!
........................
typedef DWORD (__stdcall *PFNNTQUERYSYSTEMINFORMATION) (DWORD, PVOID, DWORD, PDWORD);
typedef PVOID (__stdcall *PFNRTLCREATEQUERYDEBUGBUFFER) (DWORD, DWORD);
typedef DWORD (__stdcall *PFNRTLQUERYPROCESSDEBUGINFORMATION) (DWORD, DWORD, PVOID);
typedef void (__stdcall *PFNRTLDESTROYQUERYDEBUGBUFFER) (PVOID);
typedef void (__stdcall *PFNTRTLRUNDECODEUNICODESTRING) (BYTE, PUNICODE_STRING);PFNNTQUERYSYSTEMINFORMATION pfnNtQuerySystemInformation;
PFNRTLCREATEQUERYDEBUGBUFFER pfnRtlCreateQueryDebugBuffer;
PFNRTLQUERYPROCESSDEBUGINFORMATION pfnRtlQueryProcessDebugInformation;
PFNRTLDESTROYQUERYDEBUGBUFFER pfnRtlDestroyQueryDebugBuffer;
PFNTRTLRUNDECODEUNICODESTRING pfnRtlRunDecodeUnicodeString;
............................ _asm
{
mov AL,10
mov DL,70
// out al,dl
// mov dx,71
// in high,dx
}
HINSTANCE hNtDll = LoadLibrary("NTDLL.DLL");
pfnNtQuerySystemInformation =(PFNNTQUERYSYSTEMINFORMATION) GetProcAddress
(hNtDll,
"NtQuerySystemInformation");
pfnRtlCreateQueryDebugBuffer =(PFNRTLCREATEQUERYDEBUGBUFFER)GetProcAddress( hNtDll,"RtlCreateQueryDebugBuffer");pfnRtlQueryProcessDebugInformation = (PFNRTLQUERYPROCESSDEBUGINFORMATION) GetProcAddress(hNtDll,"RtlQueryProcessDebugInformation");pfnRtlDestroyQueryDebugBuffer =(PFNRTLDESTROYQUERYDEBUGBUFFER) GetProcAddress(hNtDll,"RtlDestroyQueryDebugBuffer");
pfnRtlRunDecodeUnicodeString =(PFNTRTLRUNDECODEUNICODESTRING) GetProcAddress (hNtDll,"RtlRunDecodeUnicodeString");
.......................................................
这段程序
1.typedef DWORD (__stdcall *PFNNTQUERYSYSTEMINFORMATION) (DWORD, PVOID, DWORD, PDWORD);
.....................................................
typedef void (__stdcall *PFNRTLDESTROYQUERYDEBUGBUFFER) (PVOID);
向程序这样定义有什么作用啊
2.程序中间有段汇编起什么作用啊!
3.NTDLL.DLL这个动态库有什么作用啊!
4.pfnNtQuerySystemInformation =(PFNNTQUERYSYSTEMINFORMATION) GetProcAddress(hNtDll,"NtQuerySystemInformation");
后面连续几句这种语句又有什么作用啊!我不太明白啊!
一连串这么多问题只有这么点分真的不好意思,本人最近很穷,如果那位认为分数少问题解决我会再加!先谢谢!
解决方案 »
- 请教前辈一个调用lib的问题,急...只有10分了...
- 我下载了几个dll,但是我很想知道这几个dll的源代码,请问高手有什么办法可以看到他的源代码.
- 【小技巧】如何用打开文件选择框来选择文件夹?
- 定义结构体,在vc怎么用啊?
- 有两个EDITBOX,怎么把它们关联起来呢?我要在第一个EDITBOX里输入内容时,第二个EDITBOX就被激活
- 请问,如何用程序设置EXCEL文件一个单元格的格式,如确定小数位数,自动换行等?
- 有谁知道甘特图(gant)???----------->>>>>
- 程序设计:字体设置对话框的开发
- 如何实现坐标缩放?请高手指教!
- 读取excel的问题
- 菜鸟问一个文件读写的问题?
- 文本颜色
.....................................................
typedef void (__stdcall *PFNRTLDESTROYQUERYDEBUGBUFFER) (PVOID);”那几句话就是定义指向函数的指针。pfnNtQuerySystemInformation =(PFNNTQUERYSYSTEMINFORMATION) GetProcAddress(hNtDll,"NtQuerySystemInformation");这句话获得NtQuerySystemInformation的函数指针(是在DLL内的相对指针)。后面的几句话大致也是同类的意思。——虽然我不太懂得汇编,现在可以大致肯定的是那几句汇编就是告诉系统现在获取的函数指针是相对指针,免得把相对指针当成绝对指针。这个源程序的作者要么是写程序年头太多,习惯改不了。要么就是故意卖弄。建议改写成用头文件+LIB的方式调用DLL的方式,没有恼人的函数指针的问题。程序的可读性也会大大提高。我现在没有MSDN的光盘,还没有查出NTDLL用的是哪个LIB和头文件。你自己可以在MSDN中查一下。
2、汇编码是读写端口的,可能是串口还是并口或其他采集卡上的端口。
3、Windows NT API library; core Windows NT component
4、给函数指针赋值,可以用此指针调用dll中的函数。
其他的好象都是DLL的调用过程,建议看一下,DLL的现式调用
呵呵