360木马防火墙关闭,点击开启,显示错误80020001.文件监控API缺失什么的.杀过毒,显示没毒

360木马防火墙关闭,点击开启,显示错误80020001.文件监控API缺失什么的.杀过毒,显示没毒,第1张

应该是360主动防御被木马损坏了~

把360卸载了从网上找个最新的下载安装

为了安全最好还是重新安装下电脑系统息源于:华中红客安全网里面有更专业的详细电脑技术内容

JavaSE 1.7提供了相关的API,去监视文件或者文件夹的变动,主要的API都在java.nio.file下面,其大概流程如下:

package org.xdemo.superutil.j2se.filewatch

 

import static java.nio.file.LinkOption.NOFOLLOW_LINKS

 

import java.io.File

import java.io.IOException

import java.nio.file.FileSystems

import java.nio.file.FileVisitResult

import java.nio.file.Files

import java.nio.file.Path

import java.nio.file.Paths

import java.nio.file.SimpleFileVisitor

import java.nio.file.StandardWatchEventKinds

import java.nio.file.WatchEvent

import java.nio.file.WatchEvent.Kind

import java.nio.file.WatchKey

import java.nio.file.WatchService

import java.nio.file.attribute.BasicFileAttributes

import java.util.HashMap

import java.util.Map

 

/**

 * 文件夹监控

 * 

 * @author Goofy <a href="http://www.xdemo.org/">http://www.xdemo.org/</a>

 * @Date 2015年7月3日 上午9:21:33

 */

public class WatchDir {

 

    private final WatchService watcher

    private final Map<WatchKey, Path> keys

    private final boolean subDir

 

    /**

     * 构造方法

     * 

     * @param file

     *            文件目录,不可以是文件

     * @param subDir

     * @throws Exception

     */

    public WatchDir(File file, boolean subDir, FileActionCallback callback) throws Exception {

        if (!file.isDirectory())

            throw new Exception(file.getAbsolutePath() + "is not a directory!")

 

        this.watcher = FileSystems.getDefault().newWatchService()

        this.keys = new HashMap<WatchKey, Path>()

        this.subDir = subDir

 

        Path dir = Paths.get(file.getAbsolutePath())

 

        if (subDir) {

            registerAll(dir)

        } else {

            register(dir)

        }

        processEvents(callback)

    }

 

    @SuppressWarnings("unchecked")

    static <T> WatchEvent<T> cast(WatchEvent<?> event) {

        return (WatchEvent<T>) event

    }

 

    /**

     * 观察指定的目录

     * 

     * @param dir

     * @throws IOException

     */

    private void register(Path dir) throws IOException {

        WatchKey key = dir.register(watcher, StandardWatchEventKinds.ENTRY_CREATE, StandardWatchEventKinds.ENTRY_DELETE, StandardWatchEventKinds.ENTRY_MODIFY)

        keys.put(key, dir)

    }

 

    /**

     * 观察指定的目录,并且包括子目录

     */

    private void registerAll(final Path start) throws IOException {

        Files.walkFileTree(start, new SimpleFileVisitor<Path>() {

            @Override

            public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {

                register(dir)

                return FileVisitResult.CONTINUE

            }

        })

    }

 

    /**

     * 发生文件变化的回调函数

     */

    @SuppressWarnings("rawtypes")

    void processEvents(FileActionCallback callback) {

        for () {

            WatchKey key

            try {

                key = watcher.take()

            } catch (InterruptedException x) {

                return

            }

            Path dir = keys.get(key)

            if (dir == null) {

                System.err.println(" *** 作未识别")

                continue

            }

 

            for (WatchEvent<?> event : key.pollEvents()) {

                Kind kind = event.kind()

 

                // 事件可能丢失或遗弃

                if (kind == StandardWatchEventKinds.OVERFLOW) {

                    continue

                }

 

                // 目录内的变化可能是文件或者目录

                WatchEvent<Path> ev = cast(event)

                Path name = ev.context()

                Path child = dir.resolve(name)

                File file = child.toFile()

                if (kind.name().equals(FileAction.DELETE.getValue())) {

                    callback.delete(file)

                } else if (kind.name().equals(FileAction.CREATE.getValue())) {

                    callback.create(file)

                } else if (kind.name().equals(FileAction.MODIFY.getValue())) {

                    callback.modify(file)

                } else {

                    continue

                }

 

                // if directory is created, and watching recursively, then

                // register it and its sub-directories

                if (subDir && (kind == StandardWatchEventKinds.ENTRY_CREATE)) {

                    try {

                        if (Files.isDirectory(child, NOFOLLOW_LINKS)) {

                            registerAll(child)

                        }

                    } catch (IOException x) {

                        // ignore to keep sample readbale

                    }

                }

            }

 

            boolean valid = key.reset()

            if (!valid) {

                // 移除不可访问的目录

                // 因为有可能目录被移除,就会无法访问

                keys.remove(key)

                // 如果待监控的目录都不存在了,就中断执行

                if (keys.isEmpty()) {

                    break

                }

            }

        }

    }

 

}

建议不要用FindNextChangeNotification,因为确实不清楚如何获得改变了的文件名,API的话可以使用ReadDirectoryChangesW来完成这个任务(当然还有一个也很好的API SHChangeNotifyRegister)。驱动层的监视更为好,不过这里我就不谈了。

char *strDir = "k:/temp/Other"

HANDLE hDirectory

hDirectory = CreateFile( strDir, GENERIC_READ|GENERIC_WRITE,

FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE,

NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL

)

const unsigned int dwListBaseLength = sizeof( FILE_NOTIFY_INFORMATION ) + MAX_PATH

char buffer[ dwListBaseLength ] = { 0 }

FILE_NOTIFY_INFORMATION *pNotify = (FILE_NOTIFY_INFORMATION *) buffer

DWORD BytesReturned = 0

ReadDirectoryChangesW( hDirectory, pNotify, sizeof(buffer),

true, FILE_NOTIFY_CHANGE_FILE_NAME, &BytesReturned, NULL, NULL )

ShowMessage( WideCharToString( pNotify->FileName ) )

我是用bcb写的,你将她转为delphi就行了。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11701694.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存