Partager via


Fonction OperationStart (winbase.h)

Avertit le système que l’application est sur le point de démarrer une opération.

Si une application appelle OperationStart avec une valeur de OPERATION_ID valide, le système enregistre les modèles d’accès aux fichiers de l’opération spécifiée jusqu’à ce qu’OperationEnd soit appelé pour le même ID d’opération. Cet enregistrement est stocké dans un fichier de prérécupération filename.pf . Chaque appel à OperationStart doit être suivi d’un appel à OperationEnd, sinon l’enregistrement de l’opération est ignoré après 10 secondes.

Si une application appelle OperationStart pour un ID d’opération pour lequel il existe un fichier de prérécupération, le système charge les fichiers de l’opération en mémoire avant d’exécuter l’opération. Le processus d’enregistrement reste le même et le système met à jour le filename.pf fichier de prérécupération approprié.

Syntaxe

BOOL OperationStart(
  [in] OPERATION_START_PARAMETERS *OperationStartParams
);

Paramètres

[in] OperationStartParams

Structure _OPERATION_START_PARAMETERS qui spécifie VERSION, OPERATION_ID et FLAGS.

Valeur retournée

TRUE pour tous les paramètres valides et FALSE dans le cas contraire. Pour obtenir des informations détaillées sur l’erreur, appelez GetLastError.

Remarques

La version de la structure _OPERATION_START_PARAMETERS est définie comme OPERATION_API_VERSION dans le SDK Windows.

Étant donné que la fonction OperationStart est synchrone, le retour peut prendre plusieurs secondes. Cela doit être évité dans les threads d’interface utilisateur pour une réactivité optimale.

Il existe un seul instance de l’enregistreur d’opérations dans un processus. Bien que les API d’enregistreur d’opérations puissent être appelées à partir de plusieurs threads au sein du processus, tous les appels agissent sur le instance unique.

Le suivi du lancement de l’application dure pendant les 10 premières secondes de la durée de vie du processus. OperationStart doit être appelé après la fin du suivi du lancement de l’application par le système.

Chaque appel à OperationStart doit être suivi d’un appel à OperationEnd. Dans le cas contraire, la trace d’opération sera ignorée après environ 10 ans.

Le nombre maximal d’opérations pouvant être enregistrées sur un système donné est configurable. Si ce nombre maximal est dépassé, les fichiers de prérécupération les moins récents utilisés sont remplacés.

Sur Windows 8, cette fonctionnalité nécessite l’activation du service Superfetch. Windows 8 le service est activé par défaut. Pour Windows Server 2012, cette fonctionnalité de pré-opération doit être activée et désactivée en fonction des besoins. Pour ce faire, utilisez des applets de commande PowerShell basées sur CIM. La fonctionnalité prefetcher peut être exposée à l’aide de la classe CIM du CIM_PrefetcherService.

Exemples

    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());
                  }


Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows 8 [applications de bureau uniquement]
Serveur minimal pris en charge Windows Server 2012 [applications de bureau uniquement]
Plateforme cible Windows
En-tête winbase.h (inclure Windows.h)
Bibliothèque Advapi32.lib
DLL Advapi32.dll

Voir aussi

OPERATION_ID

Enregistreur d’opérations

OperationEnd

_OPERATION_END_PARAMETERS

_OPERATION_START_PARAMETERS