2016-09-21 19 views
0

を使用してGetLocalTime関数をフックして傍受することはできますが、outパラメータのフィールド値を変更するにはどうすればいいですか?wYearSYSTEMTIMEに編集しますか?残念ながら、それは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; 
+0

あなたが入力したコードは '正しく値を表示OnFunctionCalled'していますか? 'field.Value = some-value; 'を使うとうまくいくはずです。 –

+0

@ MauroH.Leggieriはい、メモ帳にフックし、Edit> Time/Dateメニューをクリックしてローカル日付を挿入すると、構造体コンソールの出力に一致しますが、 'value.Field(0).Value = 1999'を追加しても効果はありません。 –

+0

ポストコール段階でやっていますか? –

答えて

0

答えは:使用UShortVal

関連する問題