0
を使用してGetLocalTime
関数をフックして傍受することはできますが、out
パラメータのフィールド値を変更するにはどうすればいいですか?wYear
をSYSTEMTIME
に編集しますか?残念ながら、それはvoid関数であり、Field(0).Value
への直接代入は何もしません。コメントをもとにDeviareで構造体のフィールドに書き込む方法は?
CreateHook("kernel32.dll!GetLocalTime", (int)eNktHookFlags.flgOnlyPostCall);
private static void OnFunctionCalled(NktHook hook, NktProcess process, NktHookCallInfo info)
{
NktParamsEnum param = info.Params();
NktParam value = param.First().Evaluate();
for (int i = 0; i < 8; i++)
{
NktParam field = value.Field(i);
Console.WriteLine("{0} {1} {2}", field.Name, field.TypeName, field.Value);
}
}
void WINAPI GetLocalTime(
_Out_ LPSYSTEMTIME lpSystemTime
);
typedef struct _SYSTEMTIME {
WORD wYear;
WORD wMonth;
WORD wDayOfWeek;
WORD wDay;
WORD wHour;
WORD wMinute;
WORD wSecond;
WORD wMilliseconds;
} SYSTEMTIME, *PSYSTEMTIME;
あなたが入力したコードは '正しく値を表示OnFunctionCalled'していますか? 'field.Value = some-value; 'を使うとうまくいくはずです。 –
@ MauroH.Leggieriはい、メモ帳にフックし、Edit> Time/Dateメニューをクリックしてローカル日付を挿入すると、構造体コンソールの出力に一致しますが、 'value.Field(0).Value = 1999'を追加しても効果はありません。 –
ポストコール段階でやっていますか? –