SfcGetFiles函数写法[已解决]
SfcGetFiles函数 如何写?2020.08.31回顾问题:答案如下:
#NoTrayIcon#RequireAdmin
#PRE_UseX64 = n
Local $pPF, $FileCount
Local $Buffer, $pFile, $tPFE
If SfcGetFiles($pPF, $FileCount) = 0 Then
For $i = 0 To $FileCount - 1
$tPFE = DllStructCreate('ptr;ptr;ptr;', $pPF + $i * 12)
If Not @error Then
$pFile = DllStructGetData($tPFE, 2)
If $pFile <> 0 Then
$Buffer = DllStructCreate('WCHAR FileName', $pFile)
ConsoleWrite($Buffer.FileName & @CRLF)
EndIf
EndIf
Next
EndIf
Func SfcGetFiles(ByRef $ProtFileData, ByRef $FileCount)
$ProtFileData = 0
$FileCount = 0
Local $dll = DllOpen('Sfcfiles.dll')
Local $ret = DllCall($dll, 'INT', 'SfcGetFiles', 'ptr*', Null, 'LONG*', Null)
If Not @error Then
$ProtFileData = $ret
$FileCount = $ret
Return $ret
EndIf
Return SetError(1, 0, -1)
EndFunc ;==>SfcGetFiles
http://msdn.microsoft.com/en-us/library/windows/desktop/bb204784(v=vs.85).aspx
这是我自己搜到的相关资料 参数是ProtFileData 类型是ULONG 应该怎么写啊我试着写了几个总是反回0 #cs
语法
NTSTATUS WINAPI SfcGetFiles(
__out PPROTECT_FILE_ENTRY ProtFileData
__out PULONG FileCount
);
参数
ProtFileData []
一个指向 PPROTECT_FILE_ENTRY结构,其中包含受保护的文件列表。
FileCount
一个指针的位置,其中包含一个ULONG值是受保护的文件数量。
返回值
如果函数成功,返回值是STATUS_SUCCESS。如果函数失败,返回适当的NTSTATUS错误代码
#ce 上面这段谁能转化为au3 其实dllcall一直很迷茫,不知道如何使用,现在知道dll,知道里面的函数,但是调用的时候怎么调。就不会了, ...
haijie1223 发表于 2011-10-12 19:43 http://www.autoitx.com/images/common/back.gif
首先,你若只是想用sfcgetfiles函数,那么这个函数已经过时了,在vista及win7/win2008等系统已经不支持了。请用_WinAPI_SfcIsFileProtected代替就可以了。
若仅仅是想练习DLLCall,这个sfcgetfiles函数有点麻烦,因为它的第一个参数是嵌套的数据结构,因为这个数据结构PPROTECT_FILE_ENTRY里又包含着3个指针,申明时你得搞6个,象“long;long;long;longlong;long”这样子。在这点上au3搞得比C里更复杂了,其实用au3表达这个已经不大适合了。
ULONG类型,你直接用“Int”就可以了 回复 5# happytc
听说这个函数可以返回sfc文件列表,所以想看看效果,你能写出来参考一下吗。
页:
[1]