共用方式為


OperationStart 函式 (winbase.h)

通知系統應用程式即將啟動作業。

如果應用程式以有效的OPERATION_ID值呼叫 OperationStart,系統會記錄指定的作業檔案存取模式,直到呼叫 OperationEnd 以取得相同的作業標識符為止。 此記錄會儲存在 filename.pf 預先擷取檔案中。 對 OperationStart 的每個呼叫都必須接著 OperationEnd 的呼叫,否則作業的記錄會在 10 秒後捨棄。

如果應用程式針對預先擷取檔案存在的作業標識符呼叫 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線程中避免,以獲得最佳回應性。

程式中有作業錄製器的單一實例。 雖然可以從進程內的多個線程呼叫作業錄製器 API,但所有呼叫都會在單一實例上運作。

應用程式啟動追蹤會持續到進程存留期的前 10 秒。 在系統結束應用程式啟動追蹤之後,應該呼叫 OperationStart

每次呼叫 OperationStart 時,都必須接聽 OperationEnd 的呼叫。 否則,作業追蹤會在大約10個之後捨棄。

可在指定系統上記錄的作業數目上限是可設定的。 如果超過此最大值,則會取代最近使用的最低預先擷取檔案。

在 Windows 8 上,這項功能需要啟用 Superfetch 服務。 Windows 8 預設會啟用服務。 針對 Windows Server 2012,此預先擷取功能必須視需要啟用和停用。 這可以使用以 CIM 為基礎的 PowerShell Cmdlet 來完成。 您可以使用CIM_PrefetcherServiceCIM 類別來公開預先擷取功能。

範例

    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)
程式庫 Advapi32.lib
Dll Advapi32.dll

另請參閱

OPERATION_ID

Operation Recorder

OperationEnd

_OPERATION_END_PARAMETERS

_OPERATION_START_PARAMETERS