0

私はアセンブリで 2 週間しかプログラミングしていないので、アセンブリは初めてで、助けが必要です。

ディレクトリとすべてのサブディレクトリの変更を監視する必要があります。通知する必要がある変更は、ファイルの作成時とファイルの編集時だけですが、他の変更を含めれば問題ありません。

メッセージ ボックスを変更したファイルの通知を受け取る必要があります。ファイルがどのような変更を加えたかを知る必要はありません。メッセージ ボックスへのファイル パスが必要なだけです。私はウェブを検索しようとしましたが、特定のマスムのアセンブリでこれを行う方法については何も見つかりません。
私が見つけた唯一のものは、masm用に書かれたと思われるこのコードでした.それをしたくありません。

.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

誰かが上記のコードを修正したり、動作する別のコードを表示したりできれば、それは素晴らしいことです、ありがとう

4

1 に答える 1

1

タスクの本質は、オペレーティング システム固有のサービスと通知の処理です。

アセンブリでこれを行うのに迷った場合は、高級言語 (C、C++、Perl など) でコーディングして、それを機能させてください。MSDN からこれを行う例を見つけるのは難しくありません。その方法を学べば、アセンブリ言語が何をしなければならないかがかなり明確になります。

于 2013-04-01T21:22:04.097 に答える