首页
社区
课程
招聘
[求助]请问 Windows Native API 问题!急!!!
发表于: 2009-6-26 19:40 6161

[求助]请问 Windows Native API 问题!急!!!

2009-6-26 19:40
6161
很少有相关 Native API 的内容,所以很困难啊。

我想编写一个 Windows Native API  程序,就像  Windows 的 chkdsk (autochk)在Windows 启动前执行任务和功能,所以我想做一个这样的Native APi 程序,可以在如上环境下强制拷贝一些文件到指定目录,请问如何实现,如果方便麻烦写一下源代码,应该不难,也不多。

谢谢大家了!!!!!!!~!

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 722
活跃值: (123)
能力值: ( LV12,RANK:300 )
在线值:
发帖
回帖
粉丝
2
请搜索“Windows NT/2000 Native API Reference”。另外并非所有NATIVE API都是未文档的,有文档的NATIVE API可以在MSDN中找到说明。
2009-6-26 19:44
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
还有如何编译也是个问题啊能否详细叙述一下
2009-6-26 19:57
0
雪    币: 284
活跃值: (106)
能力值: ( LV9,RANK:160 )
在线值:
发帖
回帖
粉丝
4
附一个例子,自己看看吧,
typedef struct _DEBUG_MODULE_INFORMATION { 
ULONG Reserved[2];
ULONG Base;
ULONG Size;
ULONG Flags;
USHORT Index;
USHORT Unknown;
USHORT LoadCount;
USHORT ModuleNameOffset;
CHAR ImageName[256];
} DEBUG_MODULE_INFORMATION, *PDEBUG_MODULE_INFORMATION;
typedef struct _DEBUG_BUFFER {
HANDLE SectionHandle;
PVOID SectionBase;
PVOID RemoteSectionBase;
ULONG SectionBaseDelta;
HANDLE EventPairHandle;
ULONG Unknown[2];
HANDLE RemoteThreadHandle;
ULONG InfoClassMask;
ULONG SizeOfInfo;
ULONG AllocatedSize;
ULONG SectionSize;
PVOID ModuleInformation;
PVOID BackTraceInformation;
PVOID HeapInformation;
PVOID LockInformation;
PVOID Reserved[8];
} DEBUG_BUFFER, *PDEBUG_BUFFER;



typedef NTSTATUS (WINAPI *RTLQUERYPROCESSDEBUGINFORMATION)(IN ULONG ProcessId,
IN ULONG DebugInfoClassMask,
IN PDEBUG_BUFFER DebugBuffer);
typedef PDEBUG_BUFFER (WINAPI*RTLCREATEQUERYDEBUGBUFFER)(IN ULONG Size,
IN BOOLEAN EventPair);
typedef NTSTATUS (WINAPI * RTLDESTROYDEBUGBUFFER)(IN PDEBUG_BUFFER DebugBuffer);

ULONG PDI_MODULES =     0x01 ; // The loaded modules of the process
ULONG PDI_BACKTRACE =   0x02 ; // The heap stack back traces
ULONG PDI_HEAPS=        0x04 ; // The heaps of the process
ULONG PDI_HEAP_TAGS =   0x08 ; // The heap tags
ULONG PDI_HEAP_BLOCKS = 0x10 ; // The heap blocks
ULONG PDI_LOCKS =       0x20 ; // The locks created by the process
ULONG GetModBase(WCHAR* ModuleName)
{   EnableDebugPrivilege(1);
    NTSTATUS status;
	HMODULE hMod=GetModuleHandle(L"ntdll.dll");
	RTLCREATEQUERYDEBUGBUFFER RtlCreateQueryDebugBuffer=(RTLCREATEQUERYDEBUGBUFFER )GetProcAddress(hMod,"RtlCreateQueryDebugBuffer");
	RTLQUERYPROCESSDEBUGINFORMATION RtlQueryProcessDebugInformation=(RTLQUERYPROCESSDEBUGINFORMATION)GetProcAddress(hMod,"RtlQueryProcessDebugInformation");
	RTLDESTROYDEBUGBUFFER RtlDestroyQueryDebugBuffer =(RTLDESTROYDEBUGBUFFER )GetProcAddress(hMod,"RtlDestroyQueryDebugBuffer");
	if((hMod==NULL)||(RtlDestroyQueryDebugBuffer==NULL)||(RtlQueryProcessDebugInformation==NULL)||(RtlCreateQueryDebugBuffer==NULL))
	{
		MessageBox(L"函数定位失败!");
		return NULL;
	}
    
	char Name[MAX_PATH]={0};
	
	WideCharToMultiByte(CP_ACP,WC_NO_BEST_FIT_CHARS,ModuleName,wcslen(ModuleName),Name,MAX_PATH,NULL,NULL);
	PDEBUG_BUFFER Buffer=RtlCreateQueryDebugBuffer(0,FALSE);
	status=RtlQueryProcessDebugInformation(m_PidTemp,PDI_MODULES ,Buffer);
	if(!NT_SUCCESS(status))
	{   MessageBox(L"RtlQueryProcessDebugInformation函数调用失败,进程开了保护");
		return 0;
	}
	ULONG count=*(PULONG)(Buffer->ModuleInformation);
	ULONG hModule=NULL;
	PDEBUG_MODULE_INFORMATION ModuleInfo=(PDEBUG_MODULE_INFORMATION)((ULONG)Buffer->ModuleInformation+4);
	for(long i=0;i<count;i++)
	{
		if(!strcmp(ModuleInfo->ImageName+ModuleInfo->ModuleNameOffset,Name))
		{
			hModule=ModuleInfo->Base;
			break;
		}
		ModuleInfo++;
	}

    RtlDestroyQueryDebugBuffer(Buffer);	

    return hModule;
}
2009-6-26 22:40
0
雪    币: 7651
活跃值: (523)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
5
看MJ0011的博客上最早的几篇文章~
2009-6-26 22:53
0
雪    币: 7651
活跃值: (523)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
6
4楼的代码竟然还MessageBox,还GetMoudleHandle,GetProcAddress…
2009-6-26 22:56
0
雪    币: 71
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
7
参考这篇 http://www.codeproject.com/KB/threads/NativeThreadInjection.aspx

不过,本人觉得这玩意的娱乐意义远大于实际意义,譬如读取幅图片显示,那简直太有意思了
2009-6-27 11:18
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
我试试看                                    ..
2009-6-27 19:31
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
谁能详细叙述如何进行编译?
2009-6-27 20:03
0
游客
登录 | 注册 方可回帖
返回
//