Compartilhar via


Impedindo o logoff ou a suspensão durante uma gravação

Se as precauções adequadas não forem tomadas dentro de um aplicativo, é possível que um usuário faça logoff durante uma operação de gravação. Isso levará à interrupção do processo de gravação, o que pode resultar em perda de dados e possivelmente inutilizar o disco.

Para evitar esse problema, o aplicativo deve processar a mensagem WM_QUERYENDSESSION que é entregue antes de fazer logoff. Se o aplicativo receber essa mensagem durante a execução de uma operação de gravação, retorne FALSE para cancelar o procedimento de logoff. Se o aplicativo permitir que o usuário decida se deseja continuar fazendo logoff, um aviso deverá ser fornecido indicando que o usuário perderá dados.

Transições de energia durante o processo de gravação também podem criar problemas potenciais no sucesso de uma atividade de gravação. Prevenir essas complicações durante o processo de gravação requer que um aplicativo esteja ciente de quando as transições de energia estão prestes a ocorrer. Isso é feito habilitando o aplicativo a processar a mensagem WM_POWERBROADCAST. Aplicativos desenvolvidos para Windows XP ou Windows Server 2003 podem retornar BROADCAST_QUERY_DENY em resposta a PBT_APMQUERYSUSPEND, impedindo a suspensão durante o processo de gravação.

Devido a alterações no Modelo de Gerenciamento de Energia para Windows Vista e Windows Server 2008, o evento PBT_APMQUERYSUSPEND não é mais entregue aos aplicativos. Em vez disso, o evento PBT_APMSUSPEND é entregue, fornecendo dois segundos para que um aplicativo se prepare para a transição.

Como resultado dessas alterações, é recomendável que os aplicativos chamem a função SetThreadExecutionState para evitar um tempo limite ocioso do sistema que normalmente resulta na transição para Suspender. É importante lembrar que chamar essa função com os sinalizadores apropriados definidos apenas evitará que o sistema fique ocioso, não uma suspensão em andamento.

Usando IMAPI

SetThreadExecutionState