Função OperationStart (winbase.h)
Notifica o sistema de que o aplicativo está prestes a iniciar uma operação.
Se um aplicativo chamar OperationStart com um valor de OPERATION_ID válido, o sistema registrará os padrões de acesso de arquivo da operação especificada até que OperationEnd seja chamado para a mesma ID de operação. Esse registro é armazenado em um arquivo de pré-busca filename.pf . Cada chamada para OperationStart deve ser seguida por uma chamada para OperationEnd, caso contrário, o registro da operação é descartado após 10 segundos.
Se um aplicativo chamar OperationStart para uma ID de operação para a qual um arquivo de pré-busca existe, o sistema carregará os arquivos da operação na memória antes de executar a operação. O processo de gravação permanece o mesmo e o sistema atualiza o arquivo de pré-busca filename.pf apropriado.
Sintaxe
BOOL OperationStart(
[in] OPERATION_START_PARAMETERS *OperationStartParams
);
Parâmetros
[in] OperationStartParams
Uma estrutura _OPERATION_START_PARAMETERS que especifica VERSION, OPERATION_ID e FLAGS.
Retornar valor
TRUE para todos os parâmetros válidos e FALSE caso contrário. Para obter informações de erro estendidas, chame GetLastError.
Comentários
A versão da estrutura de _OPERATION_START_PARAMETERS é definida como OPERATION_API_VERSION no SDK do Windows.
Como a função OperationStart é síncrona, pode levar vários segundos para retornar. Isso deve ser evitado em threads de interface do usuário para obter a melhor capacidade de resposta.
Há uma única instância do gravador de operação em um processo. Embora as APIs do gravador de operação possam ser chamadas de vários threads dentro do processo, todas as chamadas atuam na instância única.
O rastreamento de inicialização do aplicativo dura os primeiros 10 segundos do tempo de vida do processo. OperationStart deve ser chamado após o fim do rastreamento de inicialização do aplicativo pelo sistema.
Cada chamada para OperationStart deve ser seguida por uma chamada para OperationEnd. Caso contrário, o rastreamento da operação será descartado após cerca de 10s.
O número máximo de operações que podem ser registradas em um determinado sistema é configurável. Se esse máximo for excedido, os arquivos de pré-busca menos usados recentemente serão substituídos.
Em Windows 8, essa funcionalidade exige que o serviço Superfetch seja habilitado. Windows 8 terá o serviço habilitado por padrão. Para Windows Server 2012, essa funcionalidade de pré-busca precisa ser habilitada e desabilitada conforme necessário. Isso pode ser feito usando cmdlets do PowerShell baseados em CIM. A funcionalidade de pré-busca pode ser exposta usando a classe CIM do CIM_PrefetcherService.
Exemplos
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());
}
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Windows 8 [somente aplicativos da área de trabalho] |
Servidor mínimo com suporte | Windows Server 2012 [somente aplicativos da área de trabalho] |
Plataforma de Destino | Windows |
Cabeçalho | winbase.h (inclua Windows.h) |
Biblioteca | Advapi32.lib |
DLL | Advapi32.dll |
Confira também