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 usar diskpart
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.