Windows崩溃在ChangeViceConfig2中



我对ChangeViceConfig2有问题(... Service_config_trigger_info ...)

相关代码:

    WCHAR test[] = L"TEST12";
    SERVICE_TRIGGER_SPECIFIC_DATA_ITEM stdata {
        SERVICE_TRIGGER_DATA_TYPE_STRING,
        wcslen(test)*sizeof(WCHAR),
        reinterpret_cast<BYTE*>(test)
    };
    SERVICE_TRIGGER st {
        SERVICE_TRIGGER_TYPE_NETWORK_ENDPOINT,
        SERVICE_TRIGGER_ACTION_SERVICE_START,
        const_cast<GUID*>(&NAMED_PIPE_EVENT_GUID),
        1, &stdata
    };
    ChangeServiceConfig2(Service, SERVICE_CONFIG_TRIGGER_INFO, &st);

这会在地址00000009上造成访问违规,因此显然是未检查的无效指针。并且它不是ststdata中的无效指针。地址00000009不取决于test[]的长度。

堆栈转储:

rpcrt4.dll! rpcrt4.dll!ndrConformantArrayBuffersize()
rpcrt4.dll!ndrsimplestructBuffersize()
rpcrt4.dll!ndrpunionbuffersize()
rpcrt4.dll! rpcrt4.dll!ndrcomplexstructBuffersize()
rpcrt4.dll!ndrclientCall2()rpcrt4.dll!_ndrclientCall4()
sechost.dll!changeviceconfig2w()

Service成员不是问题,也不是ChangeServiceConfig2本身:我可以通过ChangeServiceConfig2(Service, SERVICE_CONFIG_DESCRIPTION, &desc);设置服务描述。问题似乎是在SERVICE_TRIGGER的解析中。命名的管道服务显然适用于远程注册表服务,因此它没有从根本上破坏。

问:我的SERVICE_TRIGGER的哪一部分是错误的?

显然,Windows中至少有一个错误;至少它在参数验证中失败。

SERVICE_TRIGGER对象是正确的,但是ChangeServiceConfig2想要SERVICE_TRIGGER_INFO。简单解决方案:使用SERVICE_TRIGGER_INFO sti{ 1, &st, NULL };

包裹st

相关内容

  • 没有找到相关文章

最新更新