Compartilhar via


Detecting Changes to Desktop Objects

Windows Mobile SupportedWindows Embedded CE Supported

9/8/2008

O Gerenciador serviço automaticamente detecta objeto alterações e exclusões, comparando a lista de identificadores retornadas durante enumeração com alças de carregados do arquivo persistente do Gerenciador o serviço. Antes de iniciar um processo enumeração, Gerenciador o serviço faz o seguinte:

  1. Marca um bit de cada identificador armazenado em Repl.dat.
  2. Chamadas IReplStore::FindFirstItem e MapVirtualKey. IReplStore::FindNextItem.
  3. Realiza uma pesquisa binária em alças em Repl.dat cada tempo um desses métodos retorna um novo identificador para localizar um identificador que representam o mesmo objeto.
  4. Se não compatível identificador for encontrado, ele cria um novo objeto sobre o área de trabalho armazenar.
  5. Se um compatível identificador for encontrado, ele limpa o bit do identificador em Repl.dat e chamadas IReplStore::IsItemChanged Para ver se o objeto foi alterado desde a última sincronização.
  6. Se o objeto tiver sido alterado, ele chama IReplStore::CopyObject Para copiar os dados a partir de identificador retornado para o identificador que é salvo na Repl.dat.
  7. Chamadas IReplStore::IsItemReplicated Para ver se ela deve enviar o objeto para o Windows Embedded CE com dispositivo.

Todos os identificadores no Repl.dat que permanecem marcadas estando enumeração completo representam objetos excluídos.

Para acelerar o área de trabalho, enumeração provedor pode detecção e relatório área de trabalho altera para o Gerenciador serviço em tempo real. Para fazer isso, o área de trabalho provedor e serviço Gerenciador executar a seguinte ações.

  1. As chamadas Gerenciador serviço IReplNotify::OnItemNotify Para informar o área de trabalho provedor de status de um objeto.
  2. O área de trabalho provedor passa RNC_MODIFIED para um objeto modificado, RNC_CREATED para um objeto criado e RNC_DELETED para um objeto excluído.
  3. O área de trabalho provedor passa um identificador para o objeto para que possa Gerenciador o serviço pesquisa o arquivo persistente para o correspondente objeto dispositivo.

A seguinte ilustração mostra a seqüência de chamadas notificação em tempo real.

Se o área de trabalho provedor detecta que a aplicativo para desktop foi fechada, ele chama IReplNotify::OnItemNotify Com RNC_SHUTDOWN. O Gerenciador serviço responde ao descarregar o área de trabalho provedor e atualizando o exibir status.

O seguinte apresentação exemplos codificar como para implementar IReplStore::IsItemChanged e MapVirtualKey. IReplStore::IsItemReplicated.

STDMETHODIMP_(BOOL) CStore::IsItemChanged
(
   HREPLFLD  hFolder,   // handle of folder or container that stores object
   HREPLITEM hItem,     // handle of object
   HREPLITEM hItemComp  // handle of object used for comparison
)
{
   CFolder *pFolder   = (CFolder*)hFolder;
   CItem   *pItem     = (CItem*)  hItem;
   CItem   *pItemComp = (CItem*)  hItemComp;
   BOOL     fChanged  =  FALSE;

   if (pItemComp)
       fChanged = CompareFileTime (&pItem->m_ftModified,
                                   &pItemComp->m_ftModified);
   else
   {
       FILETIME ft;

       // Read modification time stamp from object into ft.
       // Compare with the time stamp in the object.
       fChanged = CompareFileTime (&pItem->m_ftModified, &ft);
   }
   return fChanged;
}

STDMETHODIMP_(BOOL) CStore::IsItemReplicated
(
   HREPLFLD  hFolder,   // handle of folder or container that stores object
   HREPLITEM hItem,     // handle of object
)
{
   CFolder *pFolder = (CFolder*)hFolder;
   CItem   *pItem   = (CItem*)  hItem;

   // hItem can be NULL.
   if (pItem == NULL)
       return TRUE;

   // Search for the item. Return FALSE if not found.
   // ...

   // Check if pItem should be replicated by using information
   // stored both in pFolder & pItem. If so, return TRUE.
   // ...

   return FALSE;
}

See Also

Concepts

Developing the Desktop Provider