Compartilhar via


Descritores de segurança e segurança do WIA

Muitas das soluções para os problemas listados em Problemas comuns de segurança wia exigem que os objetos em questão tenham descritores de segurança que concedem acesso às entidades apropriadas, como contas LocalService .

Em geral, a conta LocalService tem acesso a recursos cujas ACLs permitem o acesso por uma conta localService , todos ou usuários autenticados. O serviço não pode compartilhar objetos (pipes, mapeamento de arquivos, sincronização e assim por diante) com outros aplicativos, a menos que crie uma DACL (lista de controle de acesso discricionário) que permita a um usuário ou grupo de usuários acesso ao objeto.

O exemplo de código a seguir ilustra como definir o descritor de segurança. Essa abordagem poderá ser usada se um aplicativo e um driver precisarem compartilhar um objeto de evento nomeado.

//
//  Security descriptor in SDDL form:
//  D:           - Indicates what follows is a 
//                 Discretionary Access Control List (DACL)
//  (A;;GA;;;LS) - Grants generic all access to LocalService
//  (A;;GA;;;BA) - Grants generic all access to Built-in Admins
//  (A;;GA;;;IU) - Grants generic all access to Interactive User 
//
#define MY_EVENT_DACL TEXT("D:(A;;GA;;;LS)(A;;GA;;;BA)(A;;GA;;;IU)")

//
//  Allocate appropriate security attributes for the named event
//  to be shared between driver and app running under 
//  interactive user's account.
//
SECURITY_ATTRIBUTES sa = { sizeof(sa), FALSE, NULL };
if(ConvertStringSecurityDescriptorToSecurityDescriptor(
              MY_EVENT_DACL,
              SDDL_REVISION_1, 
              &(sa.lpSecurityDescriptor), NULL))
{
  h_MyEvent = CreateEvent(&sa,           // Our security descriptor 
                                         //  allowing access to 
                                         //  Admins, LocalService
                                         //  and the Interactive
                                         //  User
                          bManualReset,
                          bInitialState, 
                          tszName);
  if (h_MyEvent != NULL)
  {
      //  Success!
  }
  else
  {
      // Failed.  Do error cleanup...
      .
      .
      .
  }
}
else
{
  // Failed.  Do error cleanup...
  .
  .
  .
}

As chaves do Registro também podem ser criadas com as ACLs apropriadas por meio de um arquivo INF. Por exemplo, para criar uma chave do Registro na chave de SOFTWARE acessível somente para Administradores e o driver em execução em LocalService, adicione as seguintes entradas ao arquivo INF:

[DDInstallSection]
Addreg=MyAddReg

[DDInstallSection.MyAddReg]
HKLM,"SOFTWARE\MyCompany\MySpecialKey\"

[DDInstallSection.MyAddReg.Security]
"D:(A;CIOI;GA;;;BA)(A;CIOI;GA;;;LS)"

Para obter mais informações sobre arquivos INF, consulte Arquivos INF para dispositivos WIA.

Consulte a documentação do Segurança do Windows para obter mais informações sobre o modelo de Segurança do Windows. Os gravadores de driver também devem estar cientes das práticas recomendadas de segurança geral que reduzem a chance de usuários destrutivos explorarem vulnerabilidades com êxito em seus drivers. "Escrevendo código seguro" (ISBN 0-7356-1588-8) da Microsoft Press é um dos vários recursos úteis disponíveis.