Compartir a través de


Función OperationStart (winbase.h)

Notifica al sistema que la aplicación está a punto de iniciar una operación.

Si una aplicación llama a OperationStart con un valor de OPERATION_ID válido, el sistema registra los patrones de acceso a archivos de la operación especificada hasta que se llama a OperationEnd para el mismo identificador de operación. Este registro se almacena en un archivo de captura previa de filename.pf . Cada llamada a OperationStart debe ir seguida de una llamada a OperationEnd; de lo contrario, el registro de la operación se descarta después de 10 segundos.

Si una aplicación llama a OperationStart para un identificador de operación para el que existe un archivo de captura previa, el sistema carga los archivos de la operación en la memoria antes de ejecutar la operación. El proceso de grabación sigue siendo el mismo y el sistema actualiza el archivo de captura previa filename.pf adecuado.

Sintaxis

BOOL OperationStart(
  [in] OPERATION_START_PARAMETERS *OperationStartParams
);

Parámetros

[in] OperationStartParams

Estructura _OPERATION_START_PARAMETERS que especifica VERSION, OPERATION_ID y FLAGS.

Valor devuelto

TRUE para todos los parámetros válidos y FALSE de lo contrario. Para obtener información de error extendida, llame a GetLastError.

Comentarios

La versión de la estructura de _OPERATION_START_PARAMETERS se define como OPERATION_API_VERSION en el Windows SDK.

Dado que la función OperationStart es sincrónica, puede tardar varios segundos en devolverse. Esto debe evitarse en subprocesos de interfaz de usuario para obtener la mejor capacidad de respuesta.

Hay una única instancia de la grabadora de operaciones en un proceso. Aunque se puede llamar a las API de grabadora de operaciones desde varios subprocesos dentro del proceso, todas las llamadas actúan en la instancia única.

El seguimiento del inicio de la aplicación dura los primeros 10 segundos de la duración del proceso. Se debe llamar a OperationStart después del seguimiento del inicio de la aplicación por parte del sistema.

Cada llamada a OperationStart debe ir seguida de una llamada a OperationEnd. De lo contrario, el seguimiento de la operación se descartará después de unos 10 años.

El número máximo de operaciones que se pueden registrar en un sistema determinado es configurable. Si se supera este máximo, se reemplazan los archivos de captura previa usados menos recientemente.

En Windows 8, esta funcionalidad requiere que se habilite el servicio Superfetch. Windows 8 tendrá habilitado el servicio de forma predeterminada. Para Windows Server 2012, esta funcionalidad de captura previa debe habilitarse y deshabilitarse según sea necesario. Esto se puede hacer mediante cmdlets de PowerShell basados en CIM. La funcionalidad de captura previa se puede exponer mediante la clase CIM del CIM_PrefetcherService.

Ejemplos

    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 Value
Cliente mínimo compatible Windows 8 [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows Server 2012 [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado winbase.h (incluye Windows.h)
Library Advapi32.lib
Archivo DLL Advapi32.dll

Consulte también

OPERATION_ID

Grabadora de operaciones

OperationEnd

_OPERATION_END_PARAMETERS

_OPERATION_START_PARAMETERS