我创建了一个打开cmd.exe的简单DLL。
在默认dlllmain.cpp
中,我添加了一个代码,用于创建新的cmd.exe
:
// dllmain.cpp : Defines the entry point for the DLL application.
#include "stdafx.h"
#include <Windows.h>
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
{
STARTUPINFO info = { sizeof(info) };
PROCESS_INFORMATION processInfo;
BOOL h = CreateProcessW(L"C:\\Windows\\System32\\cmd.exe", L"", NULL, NULL, TRUE, 0, NULL, NULL, &info, &processInfo);
}
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
当我使用控制台应用程序测试时,DLL_PROCESS_ATTACH
下方的这三行对我有用。
我希望每个加载此DLL的进程都会打开cmd.exe
。
我尝试使用PowerShell加载DLL:
Add-Type -TypeDefinition @"
using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
public static class Kernel32
{
[DllImport("kernel32", SetLastError=true, CharSet = CharSet.Ansi)]
public static extern IntPtr LoadLibrary(
[MarshalAs(UnmanagedType.LPStr)]string lpFileName);
}
"@
$LibHandle = [Kernel32]::LoadLibrary("C:\tmp\myDll.dll")
但没有任何反应,$LibHandle
的价值是0
。
我做错了什么?