我发现并阅读了这个问题,但我没有找到我的答案SSDT挂钩替代x64系统
我想保护我的申请免受其他程序的终止.在32位版本的Windows中我使用了SSDT hooking挂钩ZwTerminateProcess或ZwOpenProcess.我现在要将程序升级为64位版本的Windows.不幸的是在64位窗口中我们不能使用SSDThook(因为Patch Guard(KPP)),请注意我不想在这种情况下绕过PG并且我只使用内核模式挂钩.例如,我不希望我的程序通过以下代码开始终止(偶数):
NTSTATUS drvTerminateProcess( ULONG ulProcessID )
{
NTSTATUS ntStatus = STATUS_SUCCESS;
HANDLE hProcess;
OBJECT_ATTRIBUTES ObjectAttributes;
CLIENT_ID ClientId;
DbgPrint( "drvTerminateProcess( %u )", ulProcessID );
InitializeObjectAttributes( &ObjectAttributes, NULL, OBJ_INHERIT, NULL, NULL );
ClientId.UniqueProcess = (HANDLE)ulProcessID;
ClientId.UniqueThread = NULL;
__try
{
ntStatus = ZwOpenProcess( &hProcess, PROCESS_ALL_ACCESS, &ObjectAttributes, &ClientId );
if( NT_SUCCESS(ntStatus) )
{
ntStatus = ZwTerminateProcess( hProcess, 0 );
if( !NT_SUCCESS(ntStatus) )
DbgPrint( "ZwTerminateProcess failed with status : %08X\n", …Run Code Online (Sandbox Code Playgroud) 我想TDictionary在Delphi项目中使用a .但我有一个问题,我怎么能创建一个TDictionary默认值的常量数组?
例如,我想为字典分配4项,如波纹管代码(对于常数数组TItem):
...
type
TItem = record
_Key: string;
_Value: string;
end;
var
Dic: array [0..3]of TItem=(
(_Key:'A' ; _Value:'Apple'),
(_Key:'B' ; _Value:'Book'),
(_Key:'C' ; _Value:'C++'),
(_Key:'D' ; _Value:'Delphi')
);
...
Run Code Online (Sandbox Code Playgroud)
有没有办法做这个工作TDictionary?我想创建一个常量数组Dic(但),如波纹管结构.
...
var
Dic: TDictionary<string, string>;
begin
Dic := TDictionary<string, string>.Create;
try
Dic.Add('A', 'Apple');
Dic.Add('B', 'Book');
Dic.Add('C', 'C++');
Dic.Add('D', 'Delphi');
finally
///
end;
...
Run Code Online (Sandbox Code Playgroud)
有人对我有什么建议吗?(对不起,如果我的英语很差!)
有没有像Borland"coff2omf.exe"这样的工具将Borland OMF LIB格式转换为MS VC++ COFF LIB格式?
实际上我想在delphi中创建.obj文件并在MSVC++中使用它.
我正在开发一个用于监视流程创建的驱动程序,我编写了一个简单的代码来做到这一点。我使用PsSetCreateProcessNotifyRoutineEx。但这是行不通的!我正是在此链接上关注Microsoft帮助
#include <ntddk.h>
NTSTATUS DriverEntry(
IN PDRIVER_OBJECT DriverObject,
IN PUNICODE_STRING RegistryPath
);
VOID UnloadRoutine(
IN PDRIVER_OBJECT DriverObject
);
VOID CreateProcessNotifyEx(
__inout PEPROCESS Process,
__in HANDLE ProcessId,
__in_opt PPS_CREATE_NOTIFY_INFO CreateInfo
);
VOID CreateProcessNotifyEx(
__inout PEPROCESS Process,
__in HANDLE ProcessId,
__in_opt PPS_CREATE_NOTIFY_INFO CreateInfo
)
{
if (CreateInfo)
{
if(CreateInfo->FileOpenNameAvailable==TRUE)
{
DbgPrintEx(
DPFLTR_IHVDRIVER_ID,
DPFLTR_INFO_LEVEL,
"PID : 0x%X (%d) ImageName :%wZ CmdLine : %wZ \n",
ProcessId,ProcessId,
CreateInfo->ImageFileName,
CreateInfo->CommandLine
);
}
}
}
VOID UnloadRoutine(IN PDRIVER_OBJECT DriverObject)
{
PsSetCreateProcessNotifyRoutineEx((PCREATE_PROCESS_NOTIFY_ROUTINE_EX) CreateProcessNotifyEx, TRUE); …Run Code Online (Sandbox Code Playgroud) delphi ×2
driver ×2
64-bit ×1
arrays ×1
coff ×1
constants ×1
hook ×1
kernel-mode ×1
monitoring ×1
omf ×1
process ×1
tdictionary ×1
visual-c++ ×1