DanSaratov
Новичок
- Сообщения
- 112
- Репутация
- 1
На форуме уже была подобная тема , но пример из неё уже не работает.
http://autoit-script.ru/index.php?topic=7118
http://autoit-script.ru/index.php?topic=7118
Конкретно у меня не работал вообще. Как я понимаю, на момент его написания он был работоспособен.Prog сказал(а):
конкретно, какой код из указанной темы использовался?На форуме уже была подобная тема , но пример из неё уже не работает.
Использовал этот код:конкретно, какой код из указанной темы использовался?
Какие ошибки при запуске?
#Include <APIConstants.au3>
#Include <WinAPIEx.au3>
Global $aAdjust, $Result = False, $File = @DesktopDir & '\Test.txt'
FileOpen($File)
$Path = _WinAPI_PathSearchAndQualify($File, 1)
If @error Then
MsgBox(16, '', $File & ' not found.')
Exit
EndIf
If Not _WinAPI_FileInUse($Path) Then
MsgBox(64, '', $Path & ' not used.')
Exit
EndIf
$hToken = _WinAPI_OpenProcessToken(BitOR($TOKEN_ADJUST_PRIVILEGES, $TOKEN_QUERY))
If (@error) Or (Not _WinAPI_AdjustTokenPrivileges($hToken, $SE_DEBUG_NAME, $SE_PRIVILEGE_ENABLED, $aAdjust)) Then
MsgBox(16, '', 'You do not have administrator rights.')
Exit
EndIf
$tHandle = DllStructCreate('ushort;ushort;byte;byte;ushort;ptr;ulong')
$Size = DllStructGetSize($tHandle)
$tSHI = DllStructCreate('ulong;ptr[1048576]')
$pSHI = DllStructGetPtr($tSHI)
$Ret = DllCall('ntdll.dll', 'uint', 'ZwQuerySystemInformation', 'uint', 16, 'ptr', DllStructGetPtr($tSHI), 'ulong', DllStructGetSize($tSHI), 'ulong*', 0)
If (@error) Or ($Ret[0]) Then
Exit
EndIf
$hAutoIt = _WinAPI_GetCurrentProcess()
For $i = DllStructGetData($tSHI, 1) To 1 Step -1
$tHandle = DllStructCreate('ushort;ushort;byte;byte;ushort;ptr;ulong', $pSHI + 4 + ($i - 1) * $Size)
Switch DllStructGetData($tHandle, 3)
Case 28
Switch DllStructGetData($tHandle, 7)
Case 0x00100000, 0x00120189, 0x0012019F
ContinueLoop
Case Else
EndSwitch
$hProcess = DllCall('kernel32.dll', 'ptr', 'OpenProcess', 'dword', $PROCESS_DUP_HANDLE, 'int', 0, 'dword', DllStructGetData($tHandle, 1))
If (Not @error) And ($hProcess[0]) Then
$hObject = _WinAPI_DuplicateHandle($hProcess[0], DllStructGetData($tHandle, 5), $hAutoIt)
If $hObject Then
If StringInStr(_WinAPI_GetFinalPathNameByHandle($hObject), $Path) Then
$Result = MsgBox(64, '', 'File: ' & $Path & @CR & 'Handle: ' & Ptr(DllStructGetData($tHandle, 5)) & @CR & 'PID: ' & DllStructGetData($tHandle, 1) & @CR & 'Path: ' & FileGetLongName(_WinAPI_GetProcessFileName(DllStructGetData($tHandle, 1))))
EndIf
_WinAPI_CloseHandle($hObject)
EndIf
_WinAPI_CloseHandle($hProcess[0])
EndIf
Case Else
EndSwitch
Next
_WinAPI_AdjustTokenPrivileges($hToken, $aAdjust, 0, $aAdjust)
_WinAPI_CloseHandle($hToken)
If Not $Result Then
MsgBox(16, '', 'Process not found.')
EndIf
_WinAPI_DuplicateHandle($hProcess[0], DllStructGetData($tHandle, 5), $hAutoIt, Default, True, $DUPLICATE_SAME_ACCESS)
_WinAPI_CreateFile('C:\Program Files (x86)\ScreenBlur\Data\Languages\ru-RU.lang',2,2,0)
#Include <APIConstants.au3>
#Include <WinAPIEx.au3>
Global $aAdjust, $Result = False, $File = @ScriptFullPath
FileOpen($File)
$Path = _WinAPI_PathSearchAndQualify($File, 1)
If @error Then
MsgBox(16, '', $File & ' not found.')
Exit
EndIf
If Not _WinAPI_FileInUse($Path) Then
MsgBox(64, '', $Path & ' not used.')
Exit
EndIf
$hToken = _WinAPI_OpenProcessToken(BitOR($TOKEN_ADJUST_PRIVILEGES, $TOKEN_QUERY))
If (@error) Or (Not _WinAPI_AdjustTokenPrivileges($hToken, $SE_DEBUG_NAME, $SE_PRIVILEGE_ENABLED, $aAdjust)) Then
MsgBox(16, '', 'You do not have administrator rights.')
Exit
EndIf
$tHandle = DllStructCreate('ushort;ushort;byte;byte;ushort;ptr;ulong')
$Size = DllStructGetSize($tHandle)
$tSHI = DllStructCreate('ulong;ptr[1048576]')
$pSHI = DllStructGetPtr($tSHI)
$Ret = DllCall('ntdll.dll', 'uint', 'ZwQuerySystemInformation', 'uint', 16, 'ptr', DllStructGetPtr($tSHI), 'ulong', DllStructGetSize($tSHI), 'ulong*', 0)
If (@error) Or ($Ret[0]) Then
Exit
EndIf
$hAutoIt = _WinAPI_GetCurrentProcess()
For $i = DllStructGetData($tSHI, 1) To 1 Step -1
$tHandle = DllStructCreate('ushort;ushort;byte;byte;ushort;ptr;ulong', $pSHI + 4 + ($i - 1) * $Size)
Switch DllStructGetData($tHandle, 3)
Case 28
Switch DllStructGetData($tHandle, 7)
Case 0x00100000, 0x00120189, 0x0012019F
ContinueLoop
Case Else
EndSwitch
$hProcess = DllCall('kernel32.dll', 'ptr', 'OpenProcess', 'dword', $PROCESS_DUP_HANDLE, 'int', 0, 'dword', DllStructGetData($tHandle, 1))
If (Not @error) And ($hProcess[0]) Then
$hObject = _WinAPI_DuplicateHandle($hProcess[0], DllStructGetData($tHandle, 5), $hAutoIt, 0, 0, 2)
If $hObject Then
If StringInStr(_WinAPI_GetFinalPathNameByHandleEx($hObject), $Path) Then
$Result = MsgBox(64, '', 'File: ' & $Path & @CR & 'Handle: ' & Ptr(DllStructGetData($tHandle, 5)) & @CR & 'PID: ' & DllStructGetData($tHandle, 1) & @CR & 'Path: ' & FileGetLongName(_WinAPI_GetProcessFileName(DllStructGetData($tHandle, 1))))
EndIf
_WinAPI_CloseHandle($hObject)
EndIf
_WinAPI_CloseHandle($hProcess[0])
EndIf
Case Else
EndSwitch
Next
_WinAPI_AdjustTokenPrivileges($hToken, $aAdjust, 0, $aAdjust)
_WinAPI_CloseHandle($hToken)
If Not $Result Then
MsgBox(16, '', 'Process not found.')
EndIf
ПоказываетПроведи эксперимент, удали через проводник используемый файл. Проводник покажет сообщение типа: Этот файл используется приложением таким то.. ?