欢迎来到 嗅灵易学

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

文件沙盘代码YasVps

文件沙盘代码YasVps

之前计划写的沙盘系统,刚写好文件部分,也不算太完善,碰巧有人问起,遂贴上代码大家看去,你可以在此基础上完善之。 代码没什么WS技术,但做文件沙盘还是有不少问题的,需要的朋友可以下, 贴上主要头文件。基本代码是围绕这个头文件展开的。
#include <ntddk.h>
#pragma once
//  ucReseaon :
//
// Basic
//
#define YASVPS_CREATE_FILE     0x00
#define YASVPS_MOVE_FILE       0x01
#define YASVPS_REPLACE_FILE    0x02
#define YASVPS_RENAME_FILE     0x03
#define YASVPS_WRITE_FILE      0x04
//
//Option
//
#define YASVPS_SETFILE_BASICINFO 0x05
#define YASVPS_SETFILE_ENDINFO   0x06
#define YASVPS_SETFILE_POSINFO   0x07
#define YASVPS_SETFILE_SECINFO   0x08
//
//删除以存在文件时追踪, 
//对已存在文件的删除是不可恢复的,所以这个链表跟进程的生命周期一样,而且只能添加节点不能删除。
//
typedef struct __YASVPS_DELETETRACE
{
  ULONG uPid;
  CHAR lpszDelFilePath[YASVPS_MAX_PATH];
  struct __YASVPS_DELETETRACE* lpNext;
}YASVPS_DELETETRACE;
//
//创建新文件时追踪,添加节点前,先判断文件是否 “删除文件追踪” 存在,若存在,则删除对应节点
//删除文件时,需要查找这个表的信息,如果发现删除的是自己创建的文件,则允许删除。并删除相关跟踪节点
//同样的任何修改文件也需要先找这张表
//外界不应该操作在YASVPS中运行进程创建的文件。
//
/*
dir 规则:
如果在枚举目录文件时, “删除以存在文件” 中有文件在对应的目录中。
如果在YASVPS_CREATEFILETRACE 没有相应节点,则过滤掉删除的文件,不显示
否则显示之
*/
/*
覆盖文件:
覆盖新创建文件: 直接允许
覆盖已存在文件: 相当于 删除原来存在的文件,再创建一个新的文件。
*/
/*
移动已存在文件: eg: c:\123.exe --->> c:\windows\123.exe  --->> c:\123.exe
相当于删除文件再创建文件。
*/
//
//修改以存在文件时追踪。删除下面匹配的文件时,相应节点也要删除。
//

typedef struct __YASVPS_CREATETRACE
{
  //
  //任何修改文件也需要先找这张表,再根据 ucReseaon 做相应的操作
  //
  struct __YASVPS_CREATETRACE* lpNext;
  
  ULONG uPid; //进程PID
  HANDLE hFile;
  PFILE_OBJECT lpFileObj; //保留
  /*
  ucReseaon :
  #define YASVPS_CREATE_FILE     0x00
  #define YASVPS_MOVE_FILE       0x01
    #define YASVPS_REPLACE_FILE    0x02
    #define YASVPS_RENAME_FILE     0x03
    #define YASVPS_WRITE_FILE      0x04
  */
  UCHAR ucReseaon;
  
  /*
  ucReseaon = YASVPS_CREATE_FILE 
  eg:    lpszCreatePath : C:\123.exe
  重定向 lpszTracePath : C:\YasVPS\C:\123.exe
  之后 修改名字为 hello.exe 则 lpszCreatePath : C:\hello.exe
  对YASVPS_CREATE_FILE 文件的操作,都直接PASS, 删除文件时,需要删除lpszLinkPath,
  并删除对应YASVPS_CREATETRACE节点
    “外界不应该操作在YASVPS中运行进程创建的文件!!!!!”
  */
  //
  //重命名/移动文件/覆盖文件/创建后后新的路径
  //
  CHAR lpszNewPath[YASVPS_MAX_PATH]; 
  //
  //指向的原始路径, 当该文件被写时,这个地方为TMP文件,写的文件不能超过10M(*)
  //
  CHAR lpszLinkPath[YASVPS_MAX_PATH]; 
                                      
  //
  //下面的暂时保留,不支持,主要是从效率和节省内存考虑
  //
  /*  FILE_BASIC_INFORMATION stFileBasicInfo;
  FILE_END_OF_FILE_INFORMATION szFileEndInfo;
  */
}YASVPS_CREATETRACE, *PYASVPS_CREATETRACE;
PYASVPS_CREATETRACE VpsAddCreateTraceNode( );
PYASVPS_CREATETRACE VpsIsFileRedirect( CHAR* lpszNewPath );
PYASVPS_CREATETRACE VpsIsFileRedirect_2(IN CHAR* lpszLinkPath );
PYASVPS_CREATETRACE __VpsGetRedirectInfo( CHAR* lpszDirPath , IN OUT CHAR* lpszFileName);
BOOLEAN  VpsExaPath(PSTR szFilePath,PSTR szFileName,PSTR szFileDir,PSTR szFileExtName);
BOOLEAN  VpsExaDirPath(PSTR szFilePath,PSTR szFileDir);

上传的附件 YasVPS_Src.rar

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

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

0 0 0 举报
复制成功