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

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

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

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

По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.29.01 (Unicode 32-bit).

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

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

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

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

3

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

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

По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.29.01 (Unicode 32-bit).

4

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

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

По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.29.01 (Unicode 32-bit).

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
Skype dmitry_fiveg

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

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

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

По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.29.01 (Unicode 32-bit).

7

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

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

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

8

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

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

По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.29.01 (Unicode 32-bit).

9

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

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

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

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
Skype dmitry_fiveg

15

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

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

16

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

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

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

17

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

Malcev пишет:

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

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

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

18

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

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

По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.29.01 (Unicode 32-bit).

19

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

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

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

20

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

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

По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.29.01 (Unicode 32-bit).

21

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

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

По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.29.01 (Unicode 32-bit).

22

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

serzh82saratov пишет:

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

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

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

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

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

23

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

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

По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.29.01 (Unicode 32-bit).

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
Skype dmitry_fiveg

25

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

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

По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.29.01 (Unicode 32-bit).