将托管 dll 注入本机进程

2023-12-06

我正在尝试将托管 c# dll 注入本机可执行文件中。我将以下代码注入到可执行文件中以加载 CLR。

我知道注入有效,因为当我将代码注入 cmd.exe 时,它​​会正确输出。我知道CLRCreateInstance、pMetaHost->GetRuntime、pRuntimeInfo->GetInterface全部返回 S_OK,但是pClrRuntimeHost->Start()返回 E_FAIL。

仅当我将 dll 注入远程进程时才会发生这种情况。如果我在自己的进程上加载 dll 并从那里调用 Main,则所有调用都会返回 S_OK 并且托管代码运行良好。

Update:我尝试将代码注入其他进程,例如 notepad.exe 和 explorer.exe。它在那些方面运行良好。我仍然很好奇为什么它不在 cmd.exe 中运行,但我仅将它用于测试目的,所以它不再是问题了。

GetLastError 返回“尝试引用不存在的令牌”

#include "stdafx.h"
#include "Bootstrap.h"
#include <metahost.h>
#pragma comment(lib, "mscoree.lib")

using namespace std;

//Forward declarations
void StartTheDotNetRuntime();

DllExport HRESULT Main(_In_ LPCTSTR lpCommand)
{
    cout << "Starting .NET runtime" << endl;
    StartTheDotNetRuntime();
    return 0;
}

void StartTheDotNetRuntime()
{
    wprintf(L"Press enter to load the .net runtime...");

    HRESULT hr;
    ICLRMetaHost *pMetaHost = NULL;
    ICLRRuntimeInfo *pRuntimeInfo = NULL;
    ICLRRuntimeHost *pClrRuntimeHost = NULL;

    // build runtime
    hr = CLRCreateInstance(CLSID_CLRMetaHost, IID_PPV_ARGS(&pMetaHost));
    hr = pMetaHost->GetRuntime(L"v4.0.30319", IID_PPV_ARGS(&pRuntimeInfo));
    hr = pRuntimeInfo->GetInterface(CLSID_CLRRuntimeHost, 
        IID_PPV_ARGS(&pClrRuntimeHost));

    // start runtime
    hr = pClrRuntimeHost->Start();
    cout << "RESULT: " << hr << endl;

    wprintf(L".Net runtime is loaded.");

    // Okay, the CLR is up and running in this (previously native) process.
    // Now call a method on our managed C# class library.
    DWORD dwReturn = 0;
    hr = pClrRuntimeHost->ExecuteInDefaultAppDomain(
        L"F:\\Client.dll",
        L"Client.Main", L"Start", L"MyParameter", &dwReturn);
    cout << dwReturn << endl;
}

我已经找到了问题的答案,至少对我来说,引导程序注入的进程需要具有管理员权限。我花了很长时间才意识到,因为所有程序默认都具有管理员权限,一旦我开始以管理员身份注入的过程,它就起作用了!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将托管 dll 注入本机进程 的相关文章

  • boost::asio + std::future - 关闭套接字后访问冲突

    我正在编写一个简单的 TCP 客户端来发送和接收单行文本 异步操作由 std future 处理 以便于超时阻塞查询 不幸的是 我的测试应用程序在破坏服务器对象时因访问冲突而崩溃 这是我的代码 TCP客户端 hpp ifndef TCPCL
  • 使用 Unity 在构造函数中使用属性依赖注入

    好的 我在基类中定义了一个依赖属性 我尝试在其派生类的构造函数内部使用它 但这不起作用 该属性显示为 null Unity 在使用 container Resolve 解析实例后解析依赖属性 我的另一种选择是将 IUnityContaine
  • 如何读取扩展文件属性/文件元数据

    因此 我按照教程使用 ASP net core 将文件 上传 到本地路径 这是代码 public IActionResult About IList
  • 向 Nhibernate 发出 SQL 查询

    如何将此 SQL 查询发送给 Nhibernate SELECT Customer name FROM Company INNER JOIN Customer ON Company CompanyId Customer CompanyId
  • 启动时出现 OData v4 错误:找不到段“Whatever”的资源

    我正在构建新的 v4 服务 一切进展顺利 直到我为新模型 实体添加了新控制器 并在启动站点进行测试运行时收到此错误 控制器似乎编码正确 就像其他控制器一样 控制器 CustomersOData 中的操作 GetFeed 上的路径模板 Cus
  • 如何为 C 分配的 numpy 数组注册析构函数?

    我想在 C C 中为 numpy 数组分配数字 并将它们作为 numpy 数组传递给 python 我可以做的PyArray SimpleNewFromData http docs scipy org doc numpy reference
  • 在 Unity 进程和另一个 C# 进程之间进行本地 IPC 的最快方法 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我希望每秒大约 30 次从 C 应用程序向我的 Unity 应用程序传送大量数据 由于 Unity 不支持映射内存和管道 我考虑了 t
  • 如何访问另一个窗体上的ListView控件

    当单击与 ListView 所在表单不同的表单中的按钮时 我试图填充 ListView 我在 Form1 中创建了一个方法以在 Form2 中使用 并将参数传递给 Form1 中的方法 然后填充 ListView 当我调试时 我得到了传递的
  • 用于检查项目文件中的项目变量和引用路径的 api

    我正在研究一个 net application VS2010 与 x 没有 解和变量号这些解决方案中的项目数量 我需要检查项目属性 特定于一定数量的项目 是否同质 并且检查 验证构建期间的参考路径 有没有一个API是这样的吗 如果没有 我该
  • C# Dns.GetHostEntry 不返回连接到 WiFi 的移动设备的名称

    我有一个 C 中的 Windows 窗体应用程序 我试图获取列表中所有客户端的主机名 下面给出的是 ra00l 来自此链接的代码示例 GetHostEntry 非常慢 https stackoverflow com questions 99
  • 关于在 Windows 上使用 WiFi Direct Api?

    我目前正在开发一个应用程序 我需要在其中创建链接 阅读 无线网络连接 在桌面应用程序 在 Windows 10 上 和平板电脑 Android 但无关紧要 之间 工作流程 按钮 gt 如果需要提升权限 gt 创建类似托管网络的 WiFi 网
  • 单击 form2 上的按钮触发 form 1 中的方法

    我对 Windows 窗体很陌生 我想知道是否可以通过单击表单 2 中的按钮来触发表单 1 中的方法 我的表格 1 有一个组合框 我的 Form 2 有一个 保存 按钮 我想要实现的是 当用户单击表单 2 中的 保存 时 我需要检查表单 1
  • 将 log4net 与 Autofac 结合使用

    我正在尝试将 log4net 与 Autofac 一起使用 我粘贴了这段代码http autofac readthedocs org en latest examples log4net html http autofac readthed
  • 等待线程完成

    private void button1 Click object sender EventArgs e for int i 0 i lt 15 i Thread nova new Thread Method nova Start list
  • 私有模板函数

    我有一堂课 C h class C private template
  • gcc 的配置选项如何确定默认枚举大小(短或非短)?

    我尝试了一些 gcc 编译器来查看默认枚举大小是否很短 至少一个字节 强制使用 fshort enums 或无短 至少 4 个字节 强制使用 fno short enums user host echo Static assert 4 si
  • C++ 密码屏蔽

    我正在编写一个代码来接收密码输入 下面是我的代码 程序运行良好 但问题是除了数字和字母字符之外的其他键也被读取 例如删除 插入等 我知道如何避免它吗 特q string pw char c while c 13 Loop until Ent
  • 如何在按钮单击时模拟按键 - Unity

    我对 Unity 中的脚本编写非常陌生 我正在尝试创建一个按钮 一旦单击它就需要模拟按下 F 键 要拾取一个项目 这是我当前的代码 在编写此代码之前我浏览了所有统一论坛 但找不到任何有效的东西 Code using System Colle
  • memset 未填充数组

    u32 iterations 5 u32 ecx u32 malloc sizeof u32 iterations memset ecx 0xBAADF00D sizeof u32 iterations printf 8X n ecx 0
  • Linq-to-entities,在一个查询中获取结果+行数

    我已经看到了有关此事的多个问题 但它们已经有 2 年 或更长 的历史了 所以我想知道这方面是否有任何变化 基本思想是填充网格视图并创建自定义分页 所以 我还需要结果和行数 在 SQL 中 这将类似于 SELECT COUNT id Id N

随机推荐

  • 如何在sqlite中使用填充连接字符串

    我的 sqlite 表中有三列 Column1 Column2 Column3 A 1 1 A 1 2 A 12 2 C 13 2 B 11 2 我需要选择Column1 Column2 Column3 e g A 01 0001 我想用一
  • 在 C 中按值传递结构而不是传递指针有什么缺点吗?

    在 C 中按值传递结构而不是传递指针有什么缺点吗 如果结构体很大 显然会存在复制大量数据的性能问题 但对于较小的结构体 它基本上应该与将多个值传递给函数相同 当用作返回值时 它可能会更有趣 C 函数只有单个返回值 但您通常需要多个返回值 因
  • 如何在不重新加载页面的情况下从数据库获取数据?

    当用户提出任何显示在分区顶部的问题时 我想制作一个常见问题解答面板 而无需重新加载页面 因为我认为我必须每隔几秒就与数据库建立连接 现在的问题是如何在不重新加载页面的情况下建立连接以及如何显示新问题 您有两个选择 Ajax 它允许您使用 J
  • 如何应用 CSS 进行打印?

    我正在尝试在我的页面之一中打印 div 但打印时无法应用 css 在样式标签内写入 media print 不起作用 我应该怎么办 使用以下
  • Java 泛型和 Groovy 重载

    我使用 Groovy JUnit 和 EasyMock 为 Java 应用程序编写单元测试 EasyMock中有几个重载方法capture 已弃用 并附有注释 由于强制擦除更困难 无法在 Java 7 中编译 这些方法将类型的对象作为参数C
  • data.table 聚合操作中的进度条

    ddply has a progress要在运行时获得进度条 是否有等效的data table in R 是的 您可以使用任何您想要的进度状态 library data table dt data table a 1 4 b c a b d
  • 一页上有两个分析

    如何在一个网站上放置两个 GA 代码 我有这个代码 function i s o g r a m i GoogleAnalyticsObject r i r i r function i r q i r q push arguments i
  • 将 NSDictionary 键排序为 NSDate

    我正在使用最新的 SDK 和 XCode 4 2 开发 iOS 4 应用程序 我有一个NSMutableDictionary where keys are NSDate and values are NSMutableString 当我填满
  • 如何在Android上设置语音识别的语言?

    我一直在android中研究语音识别API 发现当语言设置更改时 语音结果会发生变化 有没有办法以编程方式设置它 或者是否打算在语音语言设置屏幕上午餐 或者还有什么 笔记 我尝试额外使用这个意图 intent putExtra Recogn
  • c++ 如何转发声明一个继承自另一个类的类?

    我创建了一个具有一堆继承类 父类 的类 以便我可以使用多态性 但问题是有两个类相互调用 因此 我需要转发声明它们 并且我可以转发声明一个类 但是当我转发声明继承的类时 编译器表示它无法将指针从一个类更改为另一个类 有没有办法对继承的类进行前
  • 根据表单中的多个列表框过滤查询

    我有一个包含两个表的 Access 数据库 联系人 和 国家 地区 其中每个都包含多个字段 我有一个查询 Filter 它将这两个表组合在一起 我想创建一个表单 其中的列表框数量与查询中的字段数量一样多 用户可以打开表单并从每个列表框中选择
  • 我可以创建一个 XSD 架构来为所有复杂类型放置一个属性吗?

    我想创建一个 XSD 来定义一个属性 该属性可以放置在其他架构中的元素或不属于任何架构中的元素上 例如 架构看起来像这样
  • java流中遇到顺序保存

    我已经经历过相关问题 例如如何确保java8流中的处理顺序 我仍然不完全清楚输出元素的顺序 因此请澄清我以下的疑问 Integer intArray 1 2 3 4 5 6 7 8 List
  • 您是否需要两个表单字段来与 HTML 匹配?

    有没有办法要求两个表单字段中的条目使用 HTML 进行匹配 或者这仍然需要用 JavaScript 来完成 例如 如果您有两个密码字段 并且想要确保用户在每个字段中输入了相同的数据 是否可以使用一些属性或其他编码来实现此目的 不完全是 HT
  • 强制在 Android 上的 Soundcloud 应用程序中打开 Soundcloud 曲目

    我有一个链接到 Soundcloud 曲目的移动应用程序 在 Android 上 单击这些链接会弹出一个对话框 要求用户 使用浏览器或 Soundcloud 应用程序完成操作 有没有办法绕过这个屏幕 只在 Soundcloud 播放器中播放
  • 如何使用 2 组件选择器和文本字段输入在 Xcode 中编写计算代码

    我正在尝试对 iPhone iPad 屏幕进行编码 该屏幕根据文本字段中输入的内容以及 2 组件选择器中选择的内容输出值 我已经完成了基础知识 直到显示输入 选择的数据为止 但缺少执行计算 我搜索了我能找到的所有资源 并利用了我找到的所有相
  • MATLAB 排除超出 1 个标准差的数据

    我对 MATLAB 缺乏经验 很抱歉新手问题 我有一个大向量 905350 个元素 其中存储了一大堆数据 我有标准差和平均值 现在我想删除高于 低于平均值一个标准差的所有数据点 我只是不知道怎么做 根据我收集的信息 我必须做某种双循环 就像
  • 如何删除mongodb中的数组元素?

    这是数组结构 contact phone number 1786543589455 place New Jersey createdAt number 1986543589455 place Houston createdAt 这里我只知道
  • 导入错误:没有名为 PyMesh 的模块

    我已经尝试安装pymesh在 Mac OS 和 Windows 上 通过下载源代码并使用python setup py install 如中所述https github com qnzhou PyMesh 在这两种情况下 当我运行测试代码时
  • 将托管 dll 注入本机进程

    我正在尝试将托管 c dll 注入本机可执行文件中 我将以下代码注入到可执行文件中以加载 CLR 我知道注入有效 因为当我将代码注入 cmd exe 时 它 会正确输出 我知道CLRCreateInstance pMetaHost gt G