#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" )//隐藏命令行
#include<Windows.h>
#include "stdafx.h"
#include <stdlib.h>
#include<tchar.h>
#include <iostream>
#include <fstream>
#include <string>
#include<taskschd.h>
using namespace std;
string xml = "1";
#define MAX_NAME 260
void file_replace(FILE* fp_in, FILE* fp_out, char* src, char* dst)
{
char c = fgetc(fp_in);
char tmp[100];
int count = 0;
while (c != EOF)
{
int pPos = 0;
if (c != src[pPos])
{
fputc(c, fp_out);
c = fgetc(fp_in);
continue;//如果当前字符不相等,继续下一个字符
}
memset(tmp, 0, 100);
while (c == src[pPos])
{
tmp[pPos] = c;
c = fgetc(fp_in);
pPos++;//相等的部分跳过
}
if (src[pPos] == '\0')
{
count++;
printf("源串已找到!替换%d处\n", count);
fputs(dst, fp_out);
continue;
}
else
{
fputs(tmp, fp_out);
continue;//如果当前字符不相等,继续下一个字符
}
}
return;
}
int main() {
char userName[MAX_NAME] = "";
char sid[MAX_NAME] = "";
DWORD nameSize = sizeof(userName);
GetUserName((LPWSTR)userName, &nameSize);
char userSID[MAX_NAME] = "";
char userDomain[MAX_NAME] = "";
DWORD sidSize = sizeof(userSID);
DWORD domainSize = sizeof(userDomain);
SID_NAME_USE snu;
LookupAccountName(NULL,
(LPWSTR)userName,
(PSID)userSID,
&sidSize,
(LPWSTR)userDomain,
&domainSize,
&snu);
PSID_IDENTIFIER_AUTHORITY psia = GetSidIdentifierAuthority(userSID);
sidSize = sprintf(sid, "S-%lu-", SID_REVISION);
sidSize += sprintf(sid + strlen(sid), "%-lu", psia->Value[5]);
int i = 0;
int subAuthorities = *GetSidSubAuthorityCount(userSID);
//获取SID完毕
//更换SID
for (i = 0; i < subAuthorities; i++)
{
sidSize += sprintf(sid + sidSize, "-%lu", *GetSidSubAuthority(userSID, i));
}
char * temppath = getenv("temp");
char xmlname[100] = "\\task_.xml";
char path[100];
strcpy(path, temppath);
strcat(path, xmlname);
cout << path << endl;
printf_s(path);//拼接临时目录和任务xml路径
//char path[100] = "C:\\Users\\Administrator\\source\\repos\\Project15\\Release\\1.xml";//xml任务路径
char old_path[100];
strcpy(old_path, path);
FILE* fp_in;
FILE* fp_out;
fp_in = fopen(path, "rt");
fp_out = fopen(strcat(path, ".bak"), "wt");
if (!fp_in || !fp_out)
{
printf("File open error!");
}
char src[100] = "%SID%";
char* dst = (sid);
file_replace(fp_in, fp_out, src, dst);
fclose(fp_in);
fclose(fp_out);
char cmd[200] = "copy ";
strcat(cmd, path);
strcat(cmd, " ");
strcat(cmd, old_path);
system(cmd);
memset(cmd, 0, 200);
strcat(cmd, "del ");
strcat(cmd, path);
system(cmd);
system("schtasks /create /xml %USERPROFILE%\\AppData\\Local\\Temp\\task_.xml /tn Apanel_task");//xml任务路径和任务名
//WinExec("cmd /c schtasks /create /xml %USERPROFILE%\\AppData\\Local\\Temp\\task_.xml /tn Apanel_task", SW_HIDE);//xml任务路径和任务名
}
C++自动获取用户SID,替换%Temp%下task_.xml文件内%SID%,命令行读取task_.xml添加计划任务
于 2023-01-25 11:56:57 首次发布