OperationStart 関数 (winbase.h)
アプリケーションが操作を開始しようとしていることをシステムに通知します。
有効なOPERATION_ID値を指定して OperationStart を呼び出した場合、同じ操作 ID に対して OperationEnd が呼び出されるまで、システムは指定された操作のファイル アクセス パターンを記録します。 このレコードは、 filename.pf プリフェッチ ファイルに格納されます。 OperationStart を呼び出すたびに OperationEnd を呼び出す必要があります。それ以外の場合、操作のレコードは 10 秒後に破棄されます。
プリフェッチ ファイルが存在する操作 ID に対してアプリケーションが OperationStart を 呼び出した場合、システムは操作を実行する前に操作のファイルをメモリに読み込みます。 記録プロセスは変わらず、システムは適切な filename.pf プリフェッチ ファイルを更新します。
構文
BOOL OperationStart(
[in] OPERATION_START_PARAMETERS *OperationStartParams
);
パラメーター
[in] OperationStartParams
VERSION、OPERATION_ID、FLAGS を指定する_OPERATION_START_PARAMETERS構造体。
戻り値
有効 なすべてのパラメーターの場合は TRUE、それ以外の場合 は FALSE 。 詳細なエラー情報を得るには、GetLastError を呼び出します。
解説
_OPERATION_START_PARAMETERS構造体のバージョンは、Windows SDKでOPERATION_API_VERSIONとして定義されます。
OperationStart 関数は同期的であるため、返されるまで数秒かかる場合があります。 これは、最適な応答性を得るための UI スレッドでは避ける必要があります。
プロセス内に操作レコーダーのインスタンスが 1 つあります。 操作レコーダー API はプロセス内の複数のスレッドから呼び出すことができますが、すべての呼び出しは 1 つのインスタンスで動作します。
アプリケーション起動トレースは、プロセスの有効期間の最初の 10 秒間続きます。 OperationStart は、システムによるアプリケーション起動トレースの終了後に呼び出す必要があります。
OperationStart を呼び出すたびに、OperationEnd の呼び出しが続く必要があります。 それ以外の場合、操作トレースは約 10 秒後に破棄されます。
特定のシステムで記録できる操作の最大数は構成可能です。 この最大値を超えた場合は、最近使用した最小プリフェッチ ファイルが置き換えられます。
Windows 8、この機能を使用するには、Superfetch サービスを有効にする必要があります。 Windows 8では、既定でサービスが有効になります。 Windows Server 2012の場合、このプリフェッチ機能は、必要に応じて有効および無効にする必要があります。 これは、CIM ベースの PowerShell コマンドレットを使用して行うことができます。 プリフェッチャー機能は、CIM_PrefetcherServiceの CIM クラスを使用して公開できます。
例
BOOL Success;
DWORD ErrorCode;
OPERATION_START_PARAMETERS OpStart;
OPERATION_END_PARAMETERS OpEnd;
// We want to notify Windows that we are going to be performing some
// disk-bound work that repeatedly access the same file data. The system will
// try to record data about our activity to make future operations faster.
ZeroMemory(&OpStart, sizeof(OpStart));
OpStart.Version = OPERATION_API_VERSION;
OpStart.OperationId = MY_OPERATION_ID_1;
ZeroMemory(&OpEnd, sizeof(OpEnd));
OpEnd.Version = OPERATION_API_VERSION;
OpEnd.OperationId = MY_OPERATION_ID_1;
// We want the system to only record activity in this thread.
OpStart.Flags = OPERATION_START_TRACE_CURRENT_THREAD;
OpEnd.Flags = 0;
Success = OperationStart(&OpStart);
if (!Success) {
ErrorCode = GetLastError();
fprintf(stderr, "OperationStart failed: %d\n", ErrorCode);
// We could not notify the system about our operation. That's OK.
}
// Perform the disk-bound work that should be recorded here.
// This may involve opening/reading many files or loading
// and running many DLLs.
Success = OperationEnd(&OpEnd);
if (!Success) {
fprintf(stderr, "OperationEnd failed: %d\n", GetLastError());
}
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 8 [デスクトップ アプリのみ] |
サポートされている最小のサーバー | Windows Server 2012 [デスクトップ アプリのみ] |
対象プラットフォーム | Windows |
ヘッダー | winbase.h (Windows.h を含む) |
Library | Advapi32.lib |
[DLL] | Advapi32.dll |
こちらもご覧ください