欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

[原创]内核中判断文件有没有存在

[原创]内核中判断文件有没有存在

在内核中如何判断应层程路径的文件是否存在?
在网络上的google一遍,没有找到现成的资料,现在整理出来分享给大家
应用层传路径给内核驱动时所传的路径为"C:\123\111.exe",在内核中是不能直接使用该路径,需要转成内核的文件路径
再进行文件判断(ZwQueryFullAttributesFile)
以下是实现代码

/************************************************************************
@method:CheckFileExists
判断应用层文件有没有存在
@param:        PUNICODE_STRING FileName
@return:存在TRUE
                不存在FALSE
@date:        [2012-07-11 zhansq]
************************************************************************/
BOOLEAN CheckFileExists(IN PWCHAR FileName)
{
        BOOLEAN bret = FALSE;
        NTSTATUS status = STATUS_SUCCESS;
        OBJECT_ATTRIBUTES attributes;
        UNICODE_STRING usSymfile;
        UNICODE_STRING ustmpfile;
        FILE_NETWORK_OPEN_INFORMATION  FileInformation;
        WCHAR pathhead[10] = L"\\??\\C:";
        //传入的路径如:C:\111\123.txt
        if (FileName == NULL || wcslen(FileName) < 4) return FALSE;
        pathhead[4] = FileName[0];
        RtlInitUnicodeString(&usSymfile,pathhead);
        try
        {
                ustmpfile.Length = 0;
                ustmpfile.MaximumLength = 600;
                ustmpfile.Buffer = ExAllocatePoolWithTag( NonPagedPool,600,'tSpR');;
                if (ustmpfile.Buffer == NULL)
                {
                        leave;
                }
                RtlZeroMemory(ustmpfile.Buffer,ustmpfile.MaximumLength);
                if (QuerySymbolicLink(&usSymfile,&ustmpfile) == FALSE)
                {
                        leave;
                }
                status = RtlAppendUnicodeToString(&ustmpfile,&FileName[2]);
                if (!NT_SUCCESS(status))
                {
                        leave;
                }
                InitializeObjectAttributes( &attributes,&ustmpfile,OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE,NULL,NULL );
                status = ZwQueryFullAttributesFile(&attributes,&FileInformation);
                if (NT_SUCCESS(status))
                {
                        //文件存在
                        bret = TRUE;
                }
        }
        finally
        {
                if (ustmpfile.Buffer != NULL) ExFreePoolWithTag(ustmpfile.Buffer,'tSpR');;
                return bret;
        }
}

上传的附件 内核中判断文件有没有存在.txt

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途。
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功