Quero negar que alguns aplicativos do meu computador acessem determinadas unidades ou volumes lógicos, mas não consegui encontrar uma solução até agora.
Antecedentes: Meu PC possui um SSD como unidade do sistema e um 15TB Raid-6 com cinco discos rígidos. O controlador está configurado para desligar as unidades após ~ 10 a 15 minutos. Isso é bom, já que às vezes não preciso acessar nada no Raid por algumas horas ou mais. Alguns aplicativos, como o Adobe Reader, acessam todos os volumes lógicos ao iniciar, por algum motivo que não consigo compreender. Minha suposição é que todos os volumes com uma letra de unidade atribuída são afetados. Remover as letras e atribuí-las novamente não é uma opção;)
Como posso impedir que o Adobe Reader ou outros aplicativos acessem esses volumes que meus hosts Raid?
Respostas:
No Windows, não existe uma maneira nativa suportada de impedir que certos processos acessem determinadas unidades, o que é "contrário à natureza atual" de como o sistema operacional lida com o acesso à unidade.
O direito de acesso é determinado pelos direitos do usuário conectado que inicia o aplicativo. Portanto, se o desenvolvedor de software decidiu que seu software deveria procurar todas as unidades acessíveis e não lhe dá a opção de desativá-lo ... bem, isso é uma programação ruim que não considera seu caso de uso específico. Mas existem algumas soluções alternativas.
A única solução "certa" é 2, pois a camada de virtualização de hardware (da máquina virtual) pode bloquear qualquer aplicativo para tentar acessar completamente o "hardware real". Embora eu não tenha tido o caso em que a solução 1 não funciona, mas teoricamente acho que poderia ser contornada.
Opção "1" - Desativando as unidades em um "nível baixo" - Nenhum software adicional é necessário
Opção 1a
É possível desativar os volumes em uma camada inferior, desativando completamente as unidades, mas isso desativará todos os volumes na unidade. Manualmente, você pode fazer isso iniciando
diskmgmt.msc
, clique com o botão direito do mouse na unidade e marque-a como "offline".Se necessário, você também poderá fazer isso usando um script de linha de comando. Seria aplicado de maneira semelhante à opção 3a / b. Você pode fazer isso, por exemplo, via cmd, conforme descrito aqui ou via PowerShell, conforme descrito aqui .
Opção 1b
Você pode desativar completamente o driver da unidade. Para fazer manualmente: inicie
diskmgmt.msc
e clique com o botão direito do mouse, escolha "opções". Em seguida, vá para a guia "Driver" e selecione "Desativar". A unidade "desaparecerá" no gerenciador de disco e não estará mais acessível através do sistema operacional. A menos que o software não execute comandos de código de máquina para se comunicar diretamente com o hardware, o aplicativo não deve ter como acessar as unidades. Pelo menos no que diz respeito ao meu conhecimento dos meandros dos sistemas operacionais.Se necessário, você também poderá fazer isso usando um script de linha de comando. Seria aplicado de maneira semelhante à Opção 3a / b usando, por exemplo
Devcon.exe
,. Você pode encontrar uma descrição detalhada aqui .Opção 2 - Usando um ambiente virtual (principalmente com software de terceiros)
Se a execução do aplicativo em um ambiente virtual é uma opção, existem várias soluções disponíveis:
dependendo da versão do Windows (é necessário o Win7 e posterior) e a licença (o "Professional" necessário, o "Home" não funciona)), basta usar o Hyper-V para configurar um ambiente virtual sem nenhum software de terceiros.
você pode usar um software de terceiros para configurar um sistema virtual como VMplayer, Virtual Box, etc. Existem muitas alternativas de freeware e payware. Ao usar esta solução, você precisará de uma segunda licença para Windows (ou a deixará sem licença, mas receberá uma sobreposição no canto inferior direito da tela que solicitará que você registre o Windows). Isso definitivamente impedirá que o software acesse a unidade.
você pode usar um aplicativo "sandbox". Mas isso dependerá do nível de virualização que o aplicativo sandbox oferece. Em alguns casos, pode resolver o problema; em outros casos, não. O Sandboxie, por exemplo (o que harrymc descreve em sua resposta ), não resolve o problema com a configuração harrymc descrita em sua resposta (original). Embora o software possa bloquear o acesso, a unidade ainda funcionará. Uma alternativa seria usar um aplicativo de sandbox diferente, como Cameyo, etc.
A propósito, aqui está um bom artigo sobre a principal diferença entre os diferentes softwares de virtualização, especialmente a diferença entre uma máquina virtual "inteira" (como o Virtual Box) ou aplicativos "semi-virtuais" (como o Sandboxie).
Opção 3 - Desmontar apenas volumes (deixando a unidade "intacta") - Nenhum software adicional é necessário, mas pode não funcionar no seu caso
Opção 3a
Em vez de iniciar o aplicativo por meio de seu atalho regular, você pode gravar um arquivo em lotes usando o comando
mountvol
que primeiro desmonta o volume não utilizado, inicia o aplicativo e remonta o volume quando o aplicativo não acessa mais a unidade. O processo de montagem / desmontagem via linha de comando é descrito aqui e aqui . Você também pode usardiskpart
como descrito aqui e aqui .Opção 3b
Como alternativa, você pode simplesmente deixar a unidade desmontada e montá-la através de um arquivo em lotes que monta a unidade, que você inicia manualmente quando necessário. Depois de terminar de usá-lo, você pode desmontá-lo manualmente usando um segundo arquivo em lotes. Você pode automatizar isso monitorando as solicitações de acesso ao sistema de arquivos e montar / desmontar a unidade conforme necessário, seguindo determinadas regras, por exemplo, que certos aplicativos não terão acesso. Mas não tenho certeza se a automação vale o esforço extra envolvido.
Opção 4 - Restringindo o acesso a uma letra de unidade (volume). Simples de fazer, mas são necessárias duas pequenas ferramentas da Microsoft - mas pode não funcionar no seu caso
Se você quiser fazê-lo sem software de terceiros, mas não se preocupe em usar duas pequenas ferramentas da Microsoft (se ainda não o usar). Prefiro esta solução porque ela obtém o problema "pela raiz" (diferenciação entre os direitos do usuário e do aplicativo) e é bastante simples e não é necessário nenhum software "grande" de terceiros.
Basicamente, você adiciona um usuário sem acesso à unidade e inicia o programa com esses direitos limitados (você ainda efetuará logon como usuário comum, não usará a conta restrita para efetuar logon).
Adicione uma conta de usuário.
Restrinja o acesso da nova conta de usuário à unidade usando o Controle de Acesso do Windows para o sistema de arquivos. Aqui está um bom tutorial, incluindo capturas de tela.
Em seguida, inicie o software com esses direitos. Você pode, por exemplo, usar PsExec.exe para fazer isso ou o Process Explorer, eis como . Um desses dois você precisará fazer o download no site da Microsoft, se ainda não o tiver.
fonte
Proponho uma solução que usa o Sandboxie . Eu não tenho o seu ambiente, então testei a execução
Acrobat.exe
em uma sandbox onde seu acessoD:
foi bloqueado. Ao abrir no Acrobat o menu Arquivo> Abrir , recebo o seguinte:Observe que o Acrobat não consegue nem encontrar o rótulo do disco
D:
; portanto, é forçado a exibi-lo de maneira esfarrapada e como ele é bloqueado quando clico em "Disco local (D :)".As etapas que eu usei foram:
C:\Program Files (x86)\Adobe\Acrobat DC\Acrobat\Acrobat.exe
)D:
C:\Program Files (x86)\Adobe\Acrobat DC\Acrobat
)A partir de agora, todos os programas iniciados na pasta Acrobat são forçados a executar na área restrita e, especificamente,
Acrobat.exe
são impedidos de acessar o discoD:
. Pode ser necessário abrir outras restrições da caixa de areia se o Acrobat tiver dificuldades em executar dentro da caixa de areia.Não sei se isso também bloqueará a chamada específica da API do Windows que o Acrobat usa para causar a ativação do disco, mas pode valer a pena tentar.
Sandboxie é um produto excelente e versátil que eu recomendo, grátis para uma sandbox padrão. Para várias caixas de areia, é payware, mas o preço da licença vitalícia é muito razoável (eu paguei). Por exemplo, instalo produtos que testo em uma sandbox e, em seguida, posso limpá-los com um clique, sem a necessidade de um desinstalador.
Outra solução de isolamento é usar o Adobe Reader dentro de um contêiner do Docker . Os contêineres do Docker são pequenos e funcionam como máquinas virtuais, mas sem a necessidade de criar a máquina, pois os contêineres prontos são baixados da galeria do Docker.
Você pode usar o Chocolatey como gerenciador de pacotes.
O Chocolatey tem muitos pacotes pré-criados disponíveis com o Adobe Reader no Adobe Acrobat Reader DC 2018.011.20063 .
Com o Docker, é possível um isolamento absoluto em relação aos recursos e, por outro lado, é possível compartilhar recursos, como pastas, de uma maneira completamente nativa.
fonte