找回密码
 加入
搜索
查看: 2498|回复: 5

[网络通信] SfcGetFiles函数写法[已解决]

[复制链接]
发表于 2011-10-12 19:43:42 | 显示全部楼层 |阅读模式
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[260]', $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[1]
                $FileCount = $ret[2]
                Return $ret[0]
        EndIf
        Return SetError(1, 0, -1)
EndFunc   ;==>SfcGetFiles



 楼主| 发表于 2011-10-13 13:41:49 | 显示全部楼层
http://msdn.microsoft.com/en-us/library/windows/desktop/bb204784(v=vs.85).aspx
这是我自己搜到的相关资料   参数是ProtFileData 类型是ULONG   应该怎么写啊  我试着写了几个总是反回0
 楼主| 发表于 2011-10-17 00:38:32 | 显示全部楼层
#cs
语法
NTSTATUS WINAPI SfcGetFiles(
  __out PPROTECT_FILE_ENTRY ProtFileData
  __out PULONG FileCount
);
参数
ProtFileData []
一个指向 PPROTECT_FILE_ENTRY结构,其中包含受保护的文件列表。
FileCount [OUT]
一个指针的位置,其中包含一个ULONG值是受保护的文件数量。
返回值
如果函数成功,返回值是STATUS_SUCCESS。如果函数失败,返回适当的NTSTATUS错误代码
#ce
 楼主| 发表于 2011-10-17 00:38:55 | 显示全部楼层
上面这段  谁能转化为au3
发表于 2011-10-17 08:31:18 | 显示全部楼层
其实dllcall一直很迷茫,不知道如何使用,现在知道dll,知道里面的函数,但是调用的时候怎么调。就不会了, ...
haijie1223 发表于 2011-10-12 19:43


首先,你若只是想用sfcgetfiles函数,那么这个函数已经过时了,在vista及win7/win2008等系统已经不支持了。请用_WinAPI_SfcIsFileProtected代替就可以了。

若仅仅是想练习DLLCall,这个sfcgetfiles函数有点麻烦,因为它的第一个参数是嵌套的数据结构,因为这个数据结构PPROTECT_FILE_ENTRY里又包含着3个指针,申明时你得搞6个,象“long;long;long;longlong;long”这样子。在这点上au3搞得比C里更复杂了,其实用au3表达这个已经不大适合了。
ULONG类型,你直接用“Int”就可以了
 楼主| 发表于 2011-10-17 10:32:30 | 显示全部楼层
回复 5# happytc


    听说这个函数可以返回sfc文件列表,所以想看看效果,你能写出来参考一下吗。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-6-11 02:54 , Processed in 0.079792 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表