使用masm程序集查看目录以进行更改

时间:2013-04-01 19:48:17

标签: windows assembly directory masm masm32

我现在只进行了两周的编程编程,所以我对组装很新,我需要一些帮助。

我需要查看目录和所有子目录以进行更改。我需要通知的唯一更改是文件创建和编辑文件时,但如果包含其他正常的文件。

我需要收到有关对消息框进行更改的文件的通知。我不需要知道文件的更改,我只需要一个消息框的文件路径。我试图搜索网络,但无法找到任何关于如何在程序集特定masm中执行此操作。
我能找到的唯一的东西是我认为是为masm编写的代码,我尝试了它但它是消息框A或其他字母也就是它,它阻止我更改该目录中任何文件的名称,我不希望它这样做。

.data
FolderPath3 db "C:\users",0
.data ?
hFile dd ?
FileBuffer        DB 200 DUP(?)

ThreadProc PROC uses edi esi Param:DWORD
    LOCAL lpBytesReturned:dword

    invoke CreateFile,addr FolderPath3,GENERIC_READ,FILE_SHARE_DELETE or FILE_SHARE_READ,0,\
                OPEN_EXISTING,FILE_FLAG_BACKUP_SEMANTICS,0
    mov hFile,eax
    invoke ReadDirectoryChangesW,hFile,addr FileBuffer,sizeof FileBuffer,TRUE,FILE_NOTIFY_CHANGE_LAST_ACCESS,\
                addr lpBytesReturned,0,0
    .if eax==0
        invoke MessageBoxA,0,0,0,MB_OK
    .else
        xor ecx,ecx
@@:
        add edi,ecx
        lea edi,FileBuffer
        mov esi,[edi].FILE_NOTIFY_INFORMATION.Action
        .if esi==FILE_ACTION_MODIFIED
                    invoke MessageBoxA, NULL, addr [edi].FILE_NOTIFY_INFORMATION.FileName, offset BoxCaption, NULL 

                    .elseif esi==0
            invoke CloseHandle,hDir
            ret
        .endif
        mov ecx,[edi].FILE_NOTIFY_INFORMATION.NextEntryOffset
        .if ecx==0
            invoke RtlZeroMemory,addr FileBuffer,sizeof FileBuffer
            jmp ThreadProc
        .endif
        jmp @B
    .endif

    ret
ThreadProc ENDP

如果有人可以修复上面的代码或向我展示不同的代码,那将会很棒, 谢谢

1 个答案:

答案 0 :(得分:1)

任务的本质是操作系统特定服务和处理通知。

如果你在汇编中迷失了这种情况,可以使用高级语言(C,C ++,Perl等)对其进行编码并使其正常工作。从MSDN中找到这样做的例子应该不难。一旦你学会了如何做到这一点,那么汇编语言必须要做的很清楚。