1.游戏安全之驱动开发R3层驱动加载工具(5-2)
2.MFC动态添加复选框
游戏安全之驱动开发R3层驱动加载工具(5-2)
继续深入驱动开发,这一节将聚焦于驱动文件的路径查找与驱动加载功能的实现。首先,我们需在DriverFunction.h文件中声明一个函数,即`CString MyDriverPath()`,并在DriverFunction.cpp文件中实现此函数。付费接口源码
函数`MyDriverPath()`旨在查找当前文件夹下后缀名为.sys的驱动文件,并返回其路径。实现这一功能,我们借助CFileFind类,利用其GetFileName()、GetFilePath()与FindFile()三个关键函数。初始化CFileFind类对象`FindDriver`与CString变量`DriverPath`,用于存储驱动文件路径。随后,jstack源码查看调用`FindDriver`对象的`FindFile`函数查找.sys后缀的驱动文件,并通过BOOL类型变量`Find`接收查找结果。
接下来,依据`Find`的返回值,判断是否找到驱动文件。若未找到,弹出提示框提示未找到.sys驱动文件,csc源码泄漏并返回FALSE。使用while循环遍历文件夹中的文件,直至找到驱动文件。当发现驱动文件时,通过`FindDriver`对象的GetFileName()函数获取文件名,与预设的驱动文件名比较,若匹配则获取文件路径并跳出循环。klocwork android源码最终,返回驱动文件路径。
在驱动加载工具Dlg.cpp中,调用上述`MyDriverPath()`函数获取驱动文件路径。若路径为空,显示驱动加载失败提示。若路径存在且驱动加载成功,qqecdh c源码提示驱动加载成功。此外,通过一个变量`a`(假设为驱动按钮的开关)来判断是否已经加载过驱动,避免重复加载。当点击按钮时,`a`递增,若`a`不等于1,则提示请先卸载驱动再重新加载。
至此,驱动加载功能实现完毕。验证功能时,运行工具,在无`.sys`文件情况下点击加载驱动,会弹出提示未找到驱动文件。将`.sys`文件放置于与工具同一文件夹下,则显示驱动加载成功。
至此,驱动加载功能实现。不过,服务尚未启动,这并非真正的成功。下一节将探讨如何启动服务,以实现完整驱动功能加载。本节的源码与工具将一并提供。
MFC动态添加复选框
这个一般会用CTreeCtrl啊...tree前面也好加复选框的, 还可以有层次结构...
按你的要求写了个, 随便建个mfc,然后拖个button进去, 添加事件, 写以下代码
TCHAR szFilters[]= _T("Files (*.*)|*.*");
CString strFileName;
CString strFilePath;
CFileDialog fileDlg(TRUE, 0, 0, OFN_FILEMUSTEXIST | OFN_HIDEREADONLY, szFilters);
if(fileDlg.DoModal() == IDOK)
{
strFileName = fileDlg.GetPathName();
CFileFind finder;
int path_num = strFileName.ReverseFind('\\');
strFilePath = strFileName.Left(path_num);
strFilePath += _T("\\*.*");
BOOL bWorking = finder.FindFile(strFilePath);
for(int i = 0; i < ; i++)
{
m_myButton[i].ShowWindow(SW_HIDE);
}
int m = 0;
while (bWorking)
{
bWorking = finder.FindNextFile();
if (finder.IsDots())
continue;
CString str = finder.GetFileName();
m_myButton[m].SetWindowTextW(str);
m_myButton[m].ShowWindow(SW_SHOW);
m++;
}
finder.Close();
}
在dlg的头文件里面加CButton m_myButton[];
在dlg的InitDialog函数里加
for(int i = 0; i < ; i++)
{
m_myButton[i].Create(L" ", WS_CHILD|BS_AUTO3STATE,
CRect(, + i * ,, + i*), this, i+);
}
PS:要源代码的留邮箱