win32实现lnk文件创建

前言:win32实现lnk文件创建

参考文章:https://x.threatbook.com/v5/article?threatInfoID=42622

手动右键创建相关的启动路径和图标的时候,如果对应的启动路径和图标不存在那么就无法创建成功,用win32的话是可以的

#include <iostream>
#include <Windows.h>
#include <shlobj.h>
#include <locale>
using namespace std;
DWORD initCom()
{
if (S_OK != CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE)) //初始化COM库失败
return -1;
return 0;
}
DWORD createLink(const wchar_t* targetPath, const wchar_t* arguments, const wchar_t* iconPath, const wchar_t* lnkPath)
{
IShellLinkW* pShellLink = NULL;
IPersistFile* ppf = NULL;
if (SUCCEEDED(initCom()))
{
HRESULT hr = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pShellLink));
if (SUCCEEDED(hr))
{
arguments = arguments == L"" ? L"" : arguments;
iconPath = iconPath == L"" ? L"" : iconPath;
pShellLink->SetPath(targetPath);
pShellLink->SetArguments(arguments);
pShellLink->SetIconLocation(iconPath, 0);
hr = pShellLink->QueryInterface(&ppf);
if (SUCCEEDED(hr))
{
hr = ppf->Save(lnkPath, TRUE);
if (!SUCCEEDED(hr))
{
ppf->Release();
pShellLink->Release();
CoUninitialize();
return -1;
}
}
else
{
pShellLink->Release();
CoUninitialize();
return -1;
}
}
else
{
return -1;
}
}
if (ppf != NULL)
{
ppf->Release();
}
if (pShellLink != NULL)
{
pShellLink->Release();
}
return 0;
}
DWORD createLink(const wchar_t* targetPath, const wchar_t* iconPath, const wchar_t* lnkPath)
{
return createLink(targetPath, NULL, iconPath, lnkPath); // 无参数
}
DWORD createLink(const wchar_t* targetPath, const wchar_t* lnkPath)
{
return createLink(targetPath, NULL, NULL, lnkPath);
}
int wmain(int argc, wchar_t* argv[])
{
setlocale(LC_ALL, "");
if (argc == 5)
{
if (!createLink(argv[1], argv[2], argv[3], argv[4]))
{
wprintf(L"save file: %s\n", argv[4]);
}
}
else if (argc == 4)
{
if (!createLink(argv[1], argv[2], argv[3]))
{
wprintf(L"save file: %s\n", argv[3]);
}
}
else
{
wprintf(L"for eaxample:\n\t%s 快捷程序路径 参数路径 图标路径 生成路径\n", argv[0], argv[0]);
wprintf(L"\t%s C:\\Windows\\system32\\calc.exe --connect D:\\WinDDK\\7600.16385.1\\Debuggers\\windbg.exe C:\\ProgramData\\test.lnk\n", argv[0], argv[0]);
wprintf(L"for eaxample:\n\t%s 快捷程序路径 图标路径 生成路径\n", argv[0], argv[0]);
wprintf(L"\t%s C:\\Windows\\system32\\calc.exe D:\\WinDDK\\7600.16385.1\\Debuggers\\windbg.exe C:\\ProgramData\\test.lnk\n", argv[0], argv[0]);
}
return 0;
}

posted @   zpchcbd  阅读(318)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
历史上的今天:
2020-02-27 CSRF的安全问题
2020-02-27 preg_replace
2020-02-27 内网渗透(三)
2020-02-27 PE 信息打印
点击右上角即可分享
微信分享提示