OperationStart 함수(winbase.h)
애플리케이션이 작업을 시작하려고 했음을 시스템에 알 수 있습니다.
애플리케이션이 유효한 OPERATION_ID 값으로 OperationStart를 호출하는 경우 시스템은 OperationEnd가 동일한 작업 ID에 대해 호출될 때까지 지정된 작업의 파일 액세스 패턴을 기록합니다. 이 레코드는 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 스레드에서는 이 작업을 피해야 합니다.
프로세스에는 단일 instance 작업 레코더가 있습니다. 프로세스 내의 여러 스레드에서 작업 레코더 API를 호출할 수 있지만 모든 호출은 단일 instance 작동합니다.
애플리케이션 시작 추적은 프로세스 수명의 처음 10초 동안 지속됩니다. 시스템에서 애플리케이션 시작 추적이 종료된 후 OperationStart를 호출해야 합니다.
OperationStart에 대한 모든 호출 뒤에 OperationEnd를 호출해야 합니다. 그렇지 않으면 작업 추적은 약 10s 후에 삭제됩니다.
지정된 시스템에 기록할 수 있는 최대 작업 수를 구성할 수 있습니다. 이 최대값을 초과하면 가장 최근에 사용한 프리페치 파일이 대체됩니다.
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 |
추가 정보