我希望能够从内部清空命令行,使得在任务管理器/进程资源管理器中查看我的进程时,命令行条目为空。
如果可能的话,我希望在当前运行的进程内完成此操作,而不是重新启动进程。
如果可能的话,我希望在当前运行的进程内完成此操作,而不是重新启动进程。
ProcessParameters.CommandLine
。希望它能起作用。
更新:我验证了我的建议。 它有效。 以下测试程序证明了这一点:#include <Windows.h>
#include <Winternl.h> // for PROCESS_BASIC_INFORMATION and ProcessBasicInformation
#include <stdio.h>
#include <tchar.h>
typedef NTSTATUS (NTAPI *PFN_NT_QUERY_INFORMATION_PROCESS) (
IN HANDLE ProcessHandle,
IN PROCESSINFOCLASS ProcessInformationClass,
OUT PVOID ProcessInformation,
IN ULONG ProcessInformationLength,
OUT PULONG ReturnLength OPTIONAL);
int main()
{
HANDLE hProcess = OpenProcess (PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,
FALSE, GetCurrentProcessId());
PROCESS_BASIC_INFORMATION pbi;
ULONG ReturnLength;
PFN_NT_QUERY_INFORMATION_PROCESS pfnNtQueryInformationProcess =
(PFN_NT_QUERY_INFORMATION_PROCESS) GetProcAddress (
GetModuleHandle(TEXT("ntdll.dll")), "NtQueryInformationProcess");
NTSTATUS status = pfnNtQueryInformationProcess (
hProcess, ProcessBasicInformation,
(PVOID)&pbi, sizeof(pbi), &ReturnLength);
// remove full information about my command line
pbi.PebBaseAddress->ProcessParameters->CommandLine.Length = 0;
getchar(); // wait till we can verify the results
return 0;
}
如果我们使用一些参数来启动程序,就会看到
而不是之前看到的以下内容
IsWow64Process
测试是否在64位上运行,并重新启动另一个exe。 - Oleg根据您上面的评论,您可能希望考虑通过环境变量传递秘钥。如果在父进程环境中设置秘钥,则子进程将继承该秘钥,而且与命令行相比,它不会那么容易被外部人员看到。
GetCommandLine
API 函数,然后将第一个字节设置为 0。即:LPTSTR cmdline = GetCommandLine();
*cmdline = '\0';
我真的不知道那是否有效或可能带来什么后果,但或许值得一试。