LdrSetDllManifestProber监视本程序Dll加载

类型定义

typedef NTSTATUS( NTAPI * PLDR_MANIFEST_PROBER_ROUTINE ) 
	(
	IN HMODULE DllBase,
	IN PCWSTR FullDllPath,
	OUT PHANDLE ActivationContext
	);

typedef NTSTATUS( NTAPI * PLDR_ACTX_LANGUAGE_ROURINE ) 
	(
	IN HANDLE Unk,
	IN USHORT LangID,
	OUT PHANDLE ActivationContext
	);

typedef void( NTAPI * PLDR_RELEASE_ACT_ROUTINE ) 
	(
	IN HANDLE ActivationContext
	);

typedef VOID( NTAPI* fnLdrSetDllManifestProber )
	(
	IN PLDR_MANIFEST_PROBER_ROUTINE ManifestProberRoutine,
	IN PLDR_ACTX_LANGUAGE_ROURINE CreateActCtxLanguageRoutine,
	IN PLDR_RELEASE_ACT_ROUTINE ReleaseActCtxRoutine
	);

使用示范

NTSTATUS NTAPI ProbeCallback( IN HMODULE DllBase, IN PCWSTR FullDllPath, OUT PHANDLE ActivationContext )//Dll加载回调
{
	wprintf( L"ProbeCallback: Base %p, path '%ls', context %p\r\n", DllBase, FullDllPath, *ActivationContext );
	if (!*ActivationContext)
		return STATUS_INVALID_PARAMETER;

	HANDLE actx = NULL;
	ACTCTXW act = { 0 };

	act.cbSize = sizeof( act );
	act.dwFlags = ACTCTX_FLAG_RESOURCE_NAME_VALID | ACTCTX_FLAG_HMODULE_VALID;
	act.lpSource = FullDllPath;
	act.hModule = DllBase;
	act.lpResourceName = ISOLATIONAWARE_MANIFEST_RESOURCE_ID;

	// Reset pointer, crucial for x64 version
	*ActivationContext = 0;

	actx = CreateActCtxW( &act );

	// Report no manifest is present
	if (actx == INVALID_HANDLE_VALUE)
		return STATUS_RESOURCE_NAME_NOT_FOUND;

	*ActivationContext = actx;

	return STATUS_SUCCESS;
}

int _tmain(int argc, _TCHAR* argv[])
{
	auto LdrSetDllManifestProber = (fnLdrSetDllManifestProber)GetProcAddress( GetModuleHandleW( L"ntdll.dll" ), "LdrSetDllManifestProber" );
	if (LdrSetDllManifestProber);
	LdrSetDllManifestProber( &ProbeCallback, NULL, &ReleaseActCtx );
	LoadLibraryW( L"winhttp.dll" );//测试加载winhttp
	return 0;
}

可能涉及的头文件与库

#include <ntstatus.h>
#pragma connect(lib,"ntdll.lib")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值