haijie1223 发表于 2011-10-12 19:43:42

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


haijie1223 发表于 2011-10-13 13:41:49

http://msdn.microsoft.com/en-us/library/windows/desktop/bb204784(v=vs.85).aspx
这是我自己搜到的相关资料   参数是ProtFileData 类型是ULONG   应该怎么写啊我试着写了几个总是反回0

haijie1223 发表于 2011-10-17 00:38:32

#cs
语法
NTSTATUS WINAPI SfcGetFiles(
__out PPROTECT_FILE_ENTRY ProtFileData
__out PULONG FileCount
);
参数
ProtFileData []
一个指向 PPROTECT_FILE_ENTRY结构,其中包含受保护的文件列表。
FileCount
一个指针的位置,其中包含一个ULONG值是受保护的文件数量。
返回值
如果函数成功,返回值是STATUS_SUCCESS。如果函数失败,返回适当的NTSTATUS错误代码
#ce

haijie1223 发表于 2011-10-17 00:38:55

上面这段谁能转化为au3

happytc 发表于 2011-10-17 08:31:18

其实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”就可以了

haijie1223 发表于 2011-10-17 10:32:30

回复 5# happytc


    听说这个函数可以返回sfc文件列表,所以想看看效果,你能写出来参考一下吗。
页: [1]
查看完整版本: SfcGetFiles函数写法[已解决]