1 (изменено: serzh82saratov, 2018-06-30 20:06:00)

Тема: AHK: Разблокировка файла

Встретил такую штуку, что некоторые DLL при первом помещении в файловую систему становятся заблокированы, при попытке их использования всплывает соответствующее сообщение.
Требуется нажать правой кнопкой, и в свойствах  снять флажок с заблокировано.
https://knowledge.autodesk.com/ru/searc … 92282.html

Возможно ли разблокировать программно?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

2 (изменено: teadrinker, 2018-06-18 23:51:11)

Re: AHK: Разблокировка файла

Скопировать, удалить, создать заново?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3

Re: AHK: Разблокировка файла

Она в любом месте, и с любым именем заблочена, пока сам флажок не снимешь.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

4

Re: AHK: Разблокировка файла

Вот длл https://ru.files.fm/u/43f45g65#_

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

5

Re: AHK: Разблокировка файла

filePath := "D:\Downloads\qweqwe.dll"
oFile := FileOpen(filePath, "r")
oFile.RawRead(buff, len := oFile.Length)
oFile.Close()

oFile := FileOpen(A_Desktop . "\qweqwe.dll", "w")
oFile.RawWrite(buff, len)
oFile.Close()
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

6 (изменено: serzh82saratov, 2018-06-19 00:14:51)

Re: AHK: Разблокировка файла

Спасибо, флажок пропал. Главное теперь чтоб это повлияло на её первое использование, проверить не могу. Спасибо.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

7

Re: AHK: Разблокировка файла

Я тоже не проверял.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

8

Re: AHK: Разблокировка файла

А есть мысли что за блокировка, и почему перезапись удаляет флажок?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

9

Re: AHK: Разблокировка файла

Так понимаю, блокируется, как файл, полученный из интернета или с другого компьютера и потенциально опасный. Перезапись путём копирования бинарных данных равнозначна созданию нового файла, не связанного с исходным.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

10 (изменено: Malcev, 2018-06-19 06:21:57)

Re: AHK: Разблокировка файла

Можно через Persistent Zone Identifier object:
https://docs.microsoft.com/en-us/previo … 9(v=vs.85)

file := "D:\Downloads\qweqwe.dll"
PersistentZoneIdentifier := "{0968E258-16C7-4DBA-AA86-462DD61E31A3}"
IZoneIdentifier := "{CD45F185-1B21-48E2-967B-EAD743A8914E}"
IPersistFile := "{0000010b-0000-0000-C000-000000000046}"
ZoneIdentifier := ComObjCreate(PersistentZoneIdentifier, IZoneIdentifier)
PersistFile := ComObjQuery(ZoneIdentifier, IPersistFile)
DllCall(NumGet(NumGet(PersistFile+0) + 5*A_PtrSize), "ptr", PersistFile, "ptr", &file, "UInt", 0)  ; load
DllCall(NumGet(NumGet(ZoneIdentifier+0) + 5*A_PtrSize), "ptr", ZoneIdentifier)  ; remove
DllCall(NumGet(NumGet(PersistFile+0) + 6*A_PtrSize), "ptr", PersistFile, "ptr", &file, "Int", 1)  ; save
ObjRelease(PersistFile)
ObjRelease(ZoneIdentifier)

11

Re: AHK: Разблокировка файла

IE записывает Persistent Zone для скачанных файлов в AltDS NTFS, при перезаписи альтернативные потоки теряются.

12 (изменено: Molotok, 2018-06-19 16:14:32)

Re: AHK: Разблокировка файла

Файловые потоки можно удалить с помощью streams.
Команда:
streams.exe -d file.exe

Мои разработки: Bsod finder, MyTetra Integrator

13

Re: AHK: Разблокировка файла

Зачем использовать утилиту, если можно через апи?

14

Re: AHK: Разблокировка файла

У меня так вышло:

FileDelete, D:\Downloads\qweqwe.dll:Zone.Identifier:$DATA
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

15

Re: AHK: Разблокировка файла

Да, рабочий способ.
Я, кстати, вообще эту дурацкую фичу вырубил через групповую политику.

16

Re: AHK: Разблокировка файла

Я так понял, это нужно serzh82saratov не для себя.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

17

Re: AHK: Разблокировка файла

Malcev пишет:

Зачем использовать утилиту, если можно через апи?

Я этот способ привел для коллекции.

Мои разработки: Bsod finder, MyTetra Integrator

18

Re: AHK: Разблокировка файла

А как можно узнать что файл заблокирован?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

19

Re: AHK: Разблокировка файла

Наверно проверить, существует ли NTFS-поток с названием %fileName%:Zone.Identifier:$DATA. Или способом, аналогичным тому, что выше привёл Malcev.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

20

Re: AHK: Разблокировка файла

Как проверить поток я само собой не знаю.
Malcev вроде привёл пример как удалить блокировку.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

21

Re: AHK: Разблокировка файла

Кроме этой темы ничего не нашёл.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

22

Re: AHK: Разблокировка файла

serzh82saratov пишет:

Как проверить поток я само собой не знаю.

if FileExist(fileName . ":Zone.Identifier:$DATA")
serzh82saratov пишет:

Malcev вроде привёл пример как удалить блокировку.

Ну там же есть наверно способ не только как удалить, но и как получить: IZoneIdentifier::GetId method

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

23

Re: AHK: Разблокировка файла

Спасибо, с FileExist работает. А можешь код привести, я эти DllCall(NumGet(NumGet( вообще не вкуриваю.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

24 (изменено: teadrinker, 2018-06-30 22:10:57)

Re: AHK: Разблокировка файла

file := "D:\Downloads\qweqwe.dll"
PersistentZoneIdentifier := "{0968E258-16C7-4DBA-AA86-462DD61E31A3}"
IZoneIdentifier := "{CD45F185-1B21-48E2-967B-EAD743A8914E}"
IPersistFile := "{0000010b-0000-0000-C000-000000000046}"
ZoneIdentifier := ComObjCreate(PersistentZoneIdentifier, IZoneIdentifier)
PersistFile := ComObjQuery(ZoneIdentifier, IPersistFile)
DllCall(NumGet(NumGet(PersistFile+0) + 5*A_PtrSize), "ptr", PersistFile, "ptr", &file, "UInt", 0)  ; load
DllCall(NumGet(NumGet(ZoneIdentifier+0) + 3*A_PtrSize), "ptr", ZoneIdentifier, UIntP, zone)  ; GetId
MsgBox, % zone
ObjRelease(PersistFile)
ObjRelease(ZoneIdentifier)

С твоим файлом у меня 3 выдаёт, что соответствует URLZONE_INTERNET.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

25

Re: AHK: Разблокировка файла

Как вы это делаете, как нонять по ссылке IZoneIdentifier::GetId method что это NumGet(NumGet(ZoneIdentifier+0) + 3*A_PtrSize), и что URLZONE_INTERNET надо искать в NativeMethodsOther.cs?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

26 (изменено: teadrinker, 2018-06-30 22:39:31)

Re: AHK: Разблокировка файла

IZoneIdentifier interface
Смотрим внизу страницы, где он определяется:

https://i.imgur.com/U84qlJh.png

Значит можно посмотреть в Urlmon.h или в UrlMon.Idl. Находим эти файлы на компьютере или в гугле, в UrlMon.Idl, например, видим:

https://i.imgur.com/7QF0YBQ.png

Это порядок методов, учитывая, что первые три обычно зарезервированы. GetId в списке первый, соответственно, его номер 4 (от 0 будет 3):

DllCall(NumGet(NumGet(ZoneIdentifier+0) + 3*A_PtrSize) ...

URLZONE_INTERNET надо искать запросом URLZONE_INTERNET constant

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

27

Re: AHK: Разблокировка файла

Сложновато. С чем связана такая замороченность в доках, почему не в привычном виде названий функций?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

28

Re: AHK: Разблокировка файла

Это в AHK сложновато, поскольку эти интерфейсы напрямую не поддерживаются, а c++, c# они по названиям и вызываются.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

29

Re: AHK: Разблокировка файла

serzh82saratov пишет:

Сложновато

В начале да.
Но стоит понять алгоритм и вызвать пару раз нужные функции - не сложнее, чем dllcall.