Win32 API 日本語リファレンス
ホームSystem.Antimalware › IAntimalwareProvider

IAntimalwareProvider

COM
IIDb2cabfe3-fe04-42b1-a5df-08d483d4d125継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

マルウェア対策製品のプロバイダーを表します。(IAntimalwareProvider)

解説(Remarks)

Windows 10 バージョン 1903 以降、Windows にはプロバイダーに対する Authenticode 署名チェックを有効にする方法が追加されました。この機能は 32 ビットプロセスと 64 ビットプロセスの両方で既定では無効です。テスト目的でプロバイダーを作成する場合は、次の Windows レジストリ値を適切に設定することで署名チェックを有効または無効にできます。この値は DWORD です。

Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\AMSI\FeatureBits

動作
0x1 署名チェックは無効です。これが既定の動作です。テスト中に一時的にこの値を使用することもできます。
0x2 Authenticode 署名のチェックが有効になります。

レジストリ値自体を削除した場合は、値 0x1 が設定されている場合と同じ動作になります。

メモ

プロバイダーとしては、Authenticode 証明書でクロス署名するために /ac スイッチ(SignTool と共に)を使用する必要があります。バイナリに署名したら、SignTool と /kp オプションを使用して検証できます。SignTool がエラーを返さなければ、バイナリは正しく署名されています。

重要

この Windows レジストリ値はオペレーティングシステムによって保護されていませんが、コンピューターのウイルス対策プロバイダーがこの値を保護し、書き込み禁止にする場合があります。

プロバイダーが読み込まれているかどうかを確認するには、コード整合性イベントを表示できます。必ずコード整合性診断イベントの詳細ログを有効化してください。確認すべきイベント ID は 30403041 です。以下に例を示します。

Log Name:      Microsoft-Windows-CodeIntegrity/Verbose
Source:        Microsoft-Windows-CodeIntegrity
Date:          M/DD/YYYY H:MM:SS PM
Event ID:      3040
Task Category: (14)
Level:         Verbose
Keywords:      
User:          [DOMAIN_NAME]\Administrator
Computer:      [COMPUTER_NAME]
Description:
Code Integrity started retrieving the cached data of [PATH_AND_FILENAME] file.
Event Xml:
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
  <System>
    <Provider Name="Microsoft-Windows-CodeIntegrity" Guid="{4ee76bd8-3cf4-44a0-a0ac-3937643e37a3}" />
    <EventID>3040</EventID>
    <Version>0</Version>
    <Level>5</Level>
    <Task>14</Task>
    <Opcode>1</Opcode>
    <Keywords>0x4000000000000000</Keywords>
    <TimeCreated SystemTime="YYYY-MM-DDT02:26:48.875954700Z" />
    <EventRecordID>7</EventRecordID>
    <Correlation />
    <Execution ProcessID="4972" ThreadID="7752" ProcessorID="1" KernelTime="14" UserTime="2" />
    <Channel>Microsoft-Windows-CodeIntegrity/Verbose</Channel>
    <Computer>[COMPUTER_NAME]</Computer>
    <Security UserID="[USER_SID]" />
  </System>
  <EventData>
    <Data Name="FileNameLength">40</Data>
    <Data Name="FileNameBuffer">[PATH_AND_FILENAME]</Data>
  </EventData>
</Event>
Log Name:      Microsoft-Windows-CodeIntegrity/Verbose
Source:        Microsoft-Windows-CodeIntegrity
Date:          M/DD/YYYY H:MM:SS PM
Event ID:      3041
Task Category: (14)
Level:         Verbose
Keywords:      
User:          [DOMAIN_NAME]\Administrator
Computer:      [COMPUTER_NAME]
Description:
Code Integrity completed retrieval of file cache. Status 0xC0000225.
Event Xml:
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
  <System>
    <Provider Name="Microsoft-Windows-CodeIntegrity" Guid="{4ee76bd8-3cf4-44a0-a0ac-3937643e37a3}" />
    <EventID>3041</EventID>
    <Version>2</Version>
    <Level>5</Level>
    <Task>14</Task>
    <Opcode>2</Opcode>
    <Keywords>0x4000000000000000</Keywords>
    <TimeCreated SystemTime="YYYY-MM-DDT02:26:48.875964700Z" />
    <EventRecordID>8</EventRecordID>
    <Correlation />
    <Execution ProcessID="4972" ThreadID="7752" ProcessorID="1" KernelTime="14" UserTime="2" />
    <Channel>Microsoft-Windows-CodeIntegrity/Verbose</Channel>
    <Computer>[COMPUTER_NAME]</Computer>
    <Security UserID="[USER_SID]" />
  </System>
  <EventData>
    <Data Name="Status">0xc0000225</Data>
    <Data Name="CachedFlags">0x0</Data>
    <Data Name="CacheSource">0</Data>
    <Data Name="CachedPolicy">0</Data>
  </EventData>
</Event>

メソッド 3

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 3 HRESULT Scan(IAmsiStream* stream, AMSI_RESULT* result)

コンテンツのストリームをスキャンします。(IAntimalwareProvider.Scan)

streamIAmsiStream*inスキャン対象の IAmsiStream ストリームです。
resultAMSI_RESULT*outスキャンの結果です。AMSI_RESULT を参照してください。

戻り値

このメソッドは次のいずれかの値を返します。

戻り値 説明
S_OK
成功しました。
E_INVALIDARG
1 つ以上の引数が無効です。
E_NOT_VALID_STATE
オブジェクトが初期化されていません。
vtbl 4 void CloseSession(ULONGLONG session)

セッションを閉じます。(IAntimalwareProvider.CloseSession)

sessionULONGLONGin閉じるセッションの ID / ハンドルです。
vtbl 5 HRESULT DisplayName(LPWSTR* displayName)

表示されるマルウェア対策プロバイダーの名前です。

displayNameLPWSTR*out表示名を格納する LPWSTR へのポインターです。

戻り値

このメソッドは次のいずれかの値を返します。

戻り値 説明
S_OK
成功しました。
E_INVALIDARG
引数が無効です。
E_NOT_VALID_STATE
オブジェクトが初期化されていません。
出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

HSP用 COM定義

#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"

出力引数:
#define global IID_IAntimalwareProvider "{B2CABFE3-FE04-42B1-A5DF-08D483D4D125}"
#usecom global IAntimalwareProvider IID_IAntimalwareProvider "{}"
#comfunc global IAntimalwareProvider_Scan          3 sptr,var
#comfunc global IAntimalwareProvider_CloseSession  4 int64
#comfunc global IAntimalwareProvider_DisplayName   5 var
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。