Функция OperationStart (winbase.h)
Уведомляет систему о том, что приложение вот-вот запустит операцию.
Если приложение вызывает OperationStart с допустимым значением OPERATION_ID , система записывает шаблоны доступа к файлам указанной операции, пока не будет вызван OperationEnd для того же идентификатора операции. Эта запись хранится в файле предварительной выборки filename.pf. За каждым вызовом OperationStart должен следовать вызов OperationEnd, в противном случае запись операции удаляется через 10 секунд.
Если приложение вызывает OperationStart для идентификатора операции, для которой существует файл предварительной выборки, система загружает файлы операции в память перед выполнением операции. Процесс записи остается прежним, и система обновляет соответствующий файл filename.pf предварительной выборки.
Синтаксис
BOOL OperationStart(
[in] OPERATION_START_PARAMETERS *OperationStartParams
);
Параметры
[in] OperationStartParams
Структура _OPERATION_START_PARAMETERS , указывающая VERSION, OPERATION_ID и FLAGS.
Возвращаемое значение
Значение TRUE для всех допустимых параметров, в противном случае — FALSE . Дополнительные сведения об ошибке можно получить, вызвав GetLastError.
Комментарии
Версия структуры _OPERATION_START_PARAMETERS определяется как OPERATION_API_VERSION в Windows SDK.
Так как функция OperationStart является синхронной, ее возврат может занять несколько секунд. Этого следует избегать в потоках пользовательского интерфейса, чтобы максимально быстро реагировать.
В процессе имеется один экземпляр средства записи операций. Хотя API-интерфейсы средства записи операций можно вызывать из нескольких потоков в процессе, все вызовы действуют на одном экземпляре.
Трассировка запуска приложения длится первые 10 секунд времени существования процесса. Метод OperationStart должен вызываться системой после завершения трассировки запуска приложения.
За каждым вызовом OperationStart должен следовать вызов OperationEnd. В противном случае трассировка операции будет удалена примерно через 10 с.
Максимальное количество операций, которые можно записать в определенной системе, можно настроить. При превышении этого максимального значения заменяются файлы предварительной выборки, которые недавно использовались.
На Windows 8 для этой функции требуется включить службу superfetch. Windows 8 служба будет включена по умолчанию. Для Windows Server 2012 эту функцию предварительной выборки необходимо включить и отключить по мере необходимости. Это можно сделать с помощью командлетов PowerShell на основе CIM. Функциональность предварительной выборки можно предоставить с помощью класса CIMCIM_PrefetcherService.
Примеры
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 |
Header | winbase.h (включая Windows.h) |
Библиотека | Advapi32.lib |
DLL | Advapi32.dll |
См. также раздел