标签: kernel32

CreateProcess使父进程被杀死时子进程被终止?

有没有办法调用CreateProcess,以便杀死父进程自动杀死子进程?

也许使用Create Process Flags

编辑
解决方案是创建作业对象,将父级和子级放在作业对象中.当父母被杀后,孩子被杀.我从这里得到了代码: 当父进程被杀死时杀死子进程 记下@wilx关于继承句柄的注释.

c++ winapi process win32-process kernel32

16
推荐指数
2
解决办法
1万
查看次数

如何使用VBA在Mac OS X上读/写内存?

在Windows上,声明的函数RtlMoveMemory提供了一种将字节块从一个地址复制到另一个地址的方法:

Private Declare PtrSafe Sub RtlMoveMemory Lib "kernel32" ( _
                              ByVal dest As LongPtr, _
                              ByVal src As LongPtr, _
                              ByVal size As LongPtr)
Run Code Online (Sandbox Code Playgroud)

Mac OS X上的等价物是什么?

macos winapi vba declare kernel32

15
推荐指数
1
解决办法
725
查看次数

C#GetProcAddress返回零

出于某种原因,每当我的C#.NET 2.0应用程序调用GetProcAddress它时,总是返回零.

public class MyClass
{
    internal static class UnsafeNativeMethods
    {
        [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        internal static extern IntPtr LoadLibrary(string lpFileName);

        [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        internal static extern bool SetDllDirectory(string lpPathName);

        [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        internal static extern IntPtr GetProcAddress(IntPtr hModule, string procName);
    }

    private void MyFunc()
    {
        IntPtr _dllHandle;
        IntPtr _fptr;
        string _fullPath = ".\\mydll.dll";
        string _procName = "MyDllFunc";

        _dllHandle = UnsafeNativeMethods.LoadLibrary(_fullPath);
        _fptr = UnsafeNativeMethods.GetProcAddress(_dllHandle, _procName); // <-- …
Run Code Online (Sandbox Code Playgroud)

c# dll getprocaddress kernel32

13
推荐指数
1
解决办法
1万
查看次数

在Windows 64中编译32位应用程序时未解析的外部符号

所以我试图将遗留应用程序从32位编译到64位.我重新编译了它使用的所有库,并使其查看到WIN SDK6.0A x64位用于库.

我在用:

  • Visual Studio Professional Edition 2008
  • Visual C++
  • dotNet Framework 3.5 SP1
  • Windows Server 2008R2
  • Windows SDK是6.0A

Everythings终于出现但我得到这些奇怪的未定义符号错误:

error LNK2019: unresolved external symbol InterlockedDecrement referenced in function ...
error LNK2019: unresolved external symbol InterlockedIncrement referenced in function ...
error LNK2019: unresolved external symbol GetModuleBaseName referenced in ...
error LNK2019: unresolved external symbol EnumProcessModules referenced in ...
error LNK2019: unresolved external symbol EnumProcesses referenced in ...
error LNK2019: unresolved external symbol GetProcessMemoryInfo referenced 
Run Code Online (Sandbox Code Playgroud)

问题是这些都是来自SDK的胜利.InterlockedDec和InterlockedInc来自kernel32.lib GetModuleBaseName,EnumProcessModules,EnumProcesses,GetProcessMemoryInfo在psapi.h中,但也包含kernel32.lib或psapi.lib

I checked C:\Program …

c++ winapi win64 visual-studio-2008 kernel32

11
推荐指数
1
解决办法
1万
查看次数

以编程方式重命名计算机c#.net

我需要通过.net应用程序重命名我的电脑.我试过这段代码:

public static bool SetMachineName(string newName)
{
    MessageBox.Show(String.Format("Setting Machine Name to '{0}'...", newName));

    // Invoke WMI to populate the machine name
    using (ManagementObject wmiObject = new ManagementObject(new ManagementPath(String.Format("Win32_ComputerSystem.Name='{0}'",System.Environment.MachineName))))
    {
        ManagementBaseObject inputArgs = wmiObject.GetMethodParameters("Rename");
        inputArgs["Name"] = newName;

        // Set the name
        ManagementBaseObject outParams = wmiObject.InvokeMethod("Rename",inputArgs,null);

        uint ret = (uint)(outParams.Properties["ReturnValue"].Value);
        if (ret == 0)
        {
            //worked
            return true;
        }
        else
        {
            //didn't work
            return false;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但它不起作用.

我试过这个:

using System.Runtime.InteropServices;

[DllImport("kernel32.dll")]
static extern bool SetComputerName(string lpComputerName);

public static bool SetMachineName(string …
Run Code Online (Sandbox Code Playgroud)

.net c# wmi kernel32

9
推荐指数
1
解决办法
2万
查看次数

VirtualProtect和kernel32.dll - 尝试访问无效地址

我正在分析流程加载的各种模块.不幸的是,我无法创建kernel32.dll内存快照,尽管该功能可以与其他模块正常工作(例如ntddl.dll).问题出在以下代码中:

/* Copy code from memory  */
if (VirtualProtect((BYTE*)virtualAddress, sizeOfCode, PAGE_EXECUTE_READWRITE, &flags) == 0) {
    std::cout << "VirtualProtect failed!" << std::endl;
    std::cout << "Virtual address: " << virtualAddress << std::endl;
    std::cout << "Size of code: " << sizeOfCode << std::endl;
    std::cout << "Error code: " << GetLastError() << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

调用此代码的结果kernel32.dll是:

Virtual address: 747d0000
Size of code: 6a000
Error code: 0x1e7
Run Code Online (Sandbox Code Playgroud)

错误描述说:

ERROR_INVALID_ADDRESS
487 (0x1E7)
Attempt to access invalid address. 
Run Code Online (Sandbox Code Playgroud)

我检查了进程'内存映射和kernel32.dll地址是否正确.原因是什么?

c++ windows dll winapi kernel32

9
推荐指数
1
解决办法
3894
查看次数

用户模式和内核模式之间的共享内存

我正在为Windows7编写一些内核端代码来访问在用户模式下创建的共享内存,如此处所示.
共享内存在用户空间中创建,名称为:

"MySharedMem"
Run Code Online (Sandbox Code Playgroud)

在用户空间中打开共享内存有效.
在内核模式下打开相同的共享内存调用 ZwOpenSection失败返回:

#define STATUS_OBJECT_NAME_NOT_FOUND     ((NTSTATUS)0xC0000034L)
Run Code Online (Sandbox Code Playgroud)

内核代码是:

NTSTATUS CModule1::OpenShared()
{
SIZE_T vs = 256;
WCHAR stringBuffer[] =  L"\\BaseNamedObjects\\MySharedMem";
UNICODE_STRING  sectionName;

RtlInitUnicodeString(&sectionName,stringBuffer);

OBJECT_ATTRIBUTES myAttributes;

InitializeObjectAttributes(&myAttributes,&sectionName,0,NULL,NULL);
NTSTATUS status0 = ZwOpenSection(&sectionHandle_,SECTION_MAP_READ|SECTION_MAP_WRITE,&myAttributes);

NTSTATUS status = ZwMapViewOfSection(&sectionHandle_, ZwCurrentProcess(), (PVOID *)&pSharedData_, 0, 0, NULL, &vs, ViewShare, 0, PAGE_READWRITE); 
return status;
}
Run Code Online (Sandbox Code Playgroud)

我尝试了几个名字(L"\\MySharedMem"L"MySharedMem"),但我得到了其他错误STATUS_OBJECT_PATH_INVALIDSTATUS_OBJECT_PATH_NOT_FOUND.
同时创建共享内存"Global\\MySharedMem"不起作用.

我究竟做错了什么?

我尝试在内核模式下创建共享内存,我获得了成功ZwCreateSection,ZwMapViewOfSection但是当我访问pSharedData_指针来测试缓冲区时,我得到了访问冲突:

NTSTATUS CModule1::MapUserSection()
{
typedef struct SHARED_SECTION {DWORD i; };
NTSTATUS status …
Run Code Online (Sandbox Code Playgroud)

c++ windows winapi shared-memory kernel32

9
推荐指数
1
解决办法
1784
查看次数

错误无法打开文件'kernel32.lib'

我在Windows 7上安装了VS2013和VS2015.

我有一个现有的C++ Dll项目正在建设正常但现在突然间它不会使用VS2015构建并给我错误:

LINK : fatal error LNK1104: cannot open file 'kernel32.lib'
Run Code Online (Sandbox Code Playgroud)

从这篇文章:致命错误LNK1104:无法打开文件'kernel32.lib'我去找了kernel32.lib文件,它位于这里:

C:\Program Files (x86)\Windows Kits\8.1\Lib\winv6.3\um\x86
Run Code Online (Sandbox Code Playgroud)

当我转到我的项目属性 - >链接器 - >输入并选择宏时,我看到这条路径确实存在:

在此输入图像描述

我的平台工具集设置为Visual Studio 2013 - Windows XP(v120_xp),它始终设置为.

为什么我的项目突然停止建设?什么可能出错?

visual-c++ kernel32 visual-studio-2015

8
推荐指数
3
解决办法
3万
查看次数

我需要固定匿名代表吗?

我从C#应用程序调用CopyFileEx,并将匿名委托传递给LPPROGRESS_ROUTINE参数,以便获取有关文件复制进度的通知.

我的问题是,匿名代表是否需要固定以及为什么(或为什么不).

此外,如果:

  1. CopyFileEx没有阻止.
  2. 如果我传入一个非匿名的代表.

谢谢!

c# winapi interop kernel32 pinning

7
推荐指数
2
解决办法
1596
查看次数

如何从hWnd获取Windows 10商店应用程序的"应用程序名称"(例如Edge)

我正试图为Windows 10应用程序获得一个可理解的"进程名称".目前,所有的人使用ApplicationFrameHost,所以我想我可以请使用ModelIdPackageName,但它似乎视窗10店应用程序(我试过Mail,StoreEdge)将不会与工作包查询API

使用kernel32.dll,GetApplicationUserModelId返回APPMODEL_ERROR_NO_APPLICATIONGetPackageId返回APPMODEL_ERROR_NO_PACKAGE.

如何获取Windows 10商店应用程序的标识符,以便我可以唯一标识Edge,以及任何其他Windows 10商店应用程序?


更新

我从hWnd(窗口句柄)获取进程ID ,所以我认为我的问题实际上是如何从窗口句柄获取"真正的"进程ID.从那里,使用这些方法可能会奏效.

c# windows kernel32 windows-10

7
推荐指数
2
解决办法
5660
查看次数