本文最后更新于:2021-08-09 晚上
快速启动目录
Windows带有快速启动目录,将需要自启的程序放入其中,就可以实现开机自启。
函数说明
SHGetSpecialFolderPath
获取指定的系统路径
| BOOL SHGetSpecialFolderPath( HWND hwndOwner, LPSTR lpszPath, int nFolder, BOOL fCreate );
|
hwndOwner:窗口所有者句柄
lpszPath:返回路径的缓冲区,该缓冲区带下至少为MAX_PATH
nFolder:系统路径的CSIDL标识。
值 |
含义 |
CSIDL_BITBUCKET |
桌面\回收站 |
CSIDL_CONTROLS |
我的电脑\控制面板 |
CSIDL_DESKTOP |
桌面 |
CSIDL_DRIVES |
我的电脑 |
CSIDL_STARTUP |
开始菜单\程序\启动 |
CSIDL_SYSTEM |
SYSTEM文件夹 |
CSIDL_WINDOWS |
WINDOWS目录 |
fCreate:指示文件夹不存在时是否要创建。为FALSE时则不创建,否则创建。
返回值:成功TRUE;失败FALSE。
具体实现
获取系统的快速启动目录,然后将需要自启的程序放入快速启动目录中。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| #include <stdio.h> #include <Windows.h> #include <shlobj.h> BOOL AutoRun(char* lpszSrcFilePath, char* lpszDestFileName) { char szStartUpPath[MAX_PATH] = { 0 }; char szDestFilePath[MAX_PATH] = { 0 }; if (SHGetSpecialFolderPathA(NULL, szStartUpPath, CSIDL_STARTUP, TRUE) == FALSE) { printf("获取系统路径失败\n"); return FALSE; } wsprintfA(szDestFilePath, "%s\\%s", szStartUpPath, lpszDestFileName); if (CopyFileA(lpszSrcFilePath, szDestFilePath, FALSE) == FALSE) { printf("向快速启动目录写入失败\n"); return FALSE; } return TRUE; } int main() { if (AutoRun("C:\\Users\\b1ackie\\Desktop\\TestApc.exe", "TestApc.exe") == FALSE) { printf("失败\n"); system("pause"); exit(-1); } printf("成功\n"); system("pause"); return 0; }
|
在物理机中运行一下此程序,火绒马上提醒
在虚拟机中运行此程序,提示成功,然后到快速启动目录中查看,即可看到自启程序
使用火绒剑进行查看,可以看到在windows的快速启动目录下,有TestApc.exe程序。
参考
参考《Windows黑客编程技术详解》一书