Script atualizado. Trabalho verificado e não aciona a caixa de diálogo de permissão.
Não é possível impedir o Windows de criar o desktop.ini, porque na verdade não é o Windows que está fazendo isso. Alguns outros serviços de terceiros estão acionando a criação desse arquivo e, claramente, o Windows permite que, apesar de UseDesktopIniCache = 0.
Desktop.ini estava me deixando louco, então eu vim com uma solução desorganizada. Observei que o arquivo desktop.ini é criado alguns segundos após a inicialização. Eu tirei vantagem disso. Usando o Agendador de tarefas, desabilito temporariamente a permissão de gravação na área de trabalho na inicialização. Isso impede que serviços de terceiros executem travessuras com minha área de trabalho. Um minuto após a inicialização, outra tarefa restabelece a permissão de gravação no Desktop.
Aqui, compartilhei um conjunto de arquivos XML de amostra para o Agendador de tarefas fazer o trabalho.
Esta versão do script desativa a herança
Eu achei a herança muito confusa, portanto a desabilitei para a pasta Desktop. Você pode adicionar / herança: e em algum lugar do segundo script, se realmente precisar, mas observe que desativar a herança é um processo com perdas, portanto, adicionar essa linha não mudará tudo de volta para onde eles estavam antes. A área de trabalho não é uma pasta do sistema, portanto, não deve afetá-lo, independentemente.
Este é para desativar a permissão de gravação na inicialização:
<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.4" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
<RegistrationInfo>
<Date>2018-01-09T18:21:14.9818893</Date>
<Author>spero_LAPTOP\spero</Author>
<URI>\Desktop Write Permission disable</URI>
</RegistrationInfo>
<Triggers>
<LogonTrigger>
<ExecutionTimeLimit>PT1M</ExecutionTimeLimit>
<Enabled>true</Enabled>
</LogonTrigger>
</Triggers>
<Principals>
<Principal id="Author">
<UserId>##################################</UserId>
<LogonType>Password</LogonType>
<RunLevel>HighestAvailable</RunLevel>
</Principal>
</Principals>
<Settings>
<MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
<DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>
<StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
<AllowHardTerminate>true</AllowHardTerminate>
<StartWhenAvailable>false</StartWhenAvailable>
<RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
<IdleSettings>
<StopOnIdleEnd>true</StopOnIdleEnd>
<RestartOnIdle>false</RestartOnIdle>
</IdleSettings>
<AllowStartOnDemand>true</AllowStartOnDemand>
<Enabled>true</Enabled>
<Hidden>true</Hidden>
<RunOnlyIfIdle>false</RunOnlyIfIdle>
<DisallowStartOnRemoteAppSession>false</DisallowStartOnRemoteAppSession>
<UseUnifiedSchedulingEngine>true</UseUnifiedSchedulingEngine>
<WakeToRun>false</WakeToRun>
<ExecutionTimeLimit>PT1M</ExecutionTimeLimit>
<Priority>7</Priority>
</Settings>
<Actions Context="Author">
<Exec>
<Command>ICACLS</Command>
<Arguments>"C:\Users\spero\Desktop" /inheritance:d /remove "SYSTEM"</Arguments>
</Exec>
<Exec>
<Command>ICACLS</Command>
<Arguments>"C:\Users\spero\Desktop" /remove "Administrators"</Arguments>
</Exec>
<Exec>
<Command>ICACLS</Command>
<Arguments>"C:\Users\spero\Desktop" /remove "spero"</Arguments>
</Exec>
<Exec>
<Command>ICACLS</Command>
<Arguments>"C:\Users\spero\Desktop" /grant "Administrators":(OI)(GR)</Arguments>
</Exec>
<Exec>
<Command>ICACLS</Command>
<Arguments>"C:\Users\spero\Desktop" /grant "spero":(OI)(GR)</Arguments>
</Exec>
</Actions>
</Task>
Este é para restabelecer a permissão um minuto depois:
<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.4" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
<RegistrationInfo>
<Date>2018-01-09T18:19:03.2968461</Date>
<Author>spero_LAPTOP\spero</Author>
<URI>\Desktop Write Permission</URI>
</RegistrationInfo>
<Triggers>
<LogonTrigger>
<ExecutionTimeLimit>PT1M</ExecutionTimeLimit>
<Enabled>true</Enabled>
<Delay>PT1M</Delay>
</LogonTrigger>
</Triggers>
<Principals>
<Principal id="Author">
<UserId>######################################</UserId>
<LogonType>Password</LogonType>
<RunLevel>HighestAvailable</RunLevel>
</Principal>
</Principals>
<Settings>
<MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
<DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>
<StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
<AllowHardTerminate>true</AllowHardTerminate>
<StartWhenAvailable>false</StartWhenAvailable>
<RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
<IdleSettings>
<StopOnIdleEnd>true</StopOnIdleEnd>
<RestartOnIdle>false</RestartOnIdle>
</IdleSettings>
<AllowStartOnDemand>true</AllowStartOnDemand>
<Enabled>true</Enabled>
<Hidden>true</Hidden>
<RunOnlyIfIdle>false</RunOnlyIfIdle>
<DisallowStartOnRemoteAppSession>false</DisallowStartOnRemoteAppSession>
<UseUnifiedSchedulingEngine>true</UseUnifiedSchedulingEngine>
<WakeToRun>false</WakeToRun>
<ExecutionTimeLimit>PT1M</ExecutionTimeLimit>
<Priority>7</Priority>
</Settings>
<Actions Context="Author">
<Exec>
<Command>ICACLS</Command>
<Arguments>"C:\Users\spero\Desktop" /grant "Administrators":F</Arguments>
</Exec>
<Exec>
<Command>ICACLS</Command>
<Arguments>"C:\Users\spero\Desktop" /grant "spero":F</Arguments>
</Exec>
</Actions>
</Task>
Observe que minha unidade de inicialização é um SSD, embora não seja muito rápido. Os horários podem variar dependendo da rapidez com que o sistema operacional é inicializado.
Além disso, você não pode importar esses scripts diretamente devido à presença dos campos Autor e ID do usuário. Apenas tome nota de todos os parâmetros.
UseDesktopIniCache=0
(a partir da resposta a superuser.com/a/650431/523828 ) não funciona no Windows 10?