我在與ChangeServiceConfig2問題(... ... SERVICE_CONFIG_TRIGGER_INFO)的Windows崩潰ChangeServiceConfig2
相關代碼:
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訪問衝突,所以顯然是未經檢查的空指針。並且它不是st
或stdata
中的空指針。地址00000009不取決於test[]
的長度。
堆棧轉儲:
Rpcrt4.dll中NdrpEmbeddedRepeatPointerBufferSize()
Rpcrt4.dll中NdrConformantArrayBufferSize()
Rpcrt4.dll中NdrSimpleStructBufferSize()
Rpcrt4.dll中NdrpUnionBufferSize()
RPCRT4!! .dll!_NdrNonEncapsulatedUnionBufferSize @ 12()
rpcrt4.dll!NdrComplexStructBufferSize()
rpcrt4.dll!NdrClientCall2()rpcrt4.dll!_NdrClientCall4()012 ! sechost.dll ChangeServiceConfig2W()
的Service
成員是沒有問題的,或ChangeServiceConfig2
本身:我可以通過ChangeServiceConfig2(Service, SERVICE_CONFIG_DESCRIPTION, &desc);
設置服務描述。該問題似乎在解析SERVICE_TRIGGER
。命名管道服務觸發器顯然適用於遠程註冊表服務,因此它並沒有從根本上打破。
問:我的SERVICE_TRIGGER
哪部分是錯的?
顯然Windows中至少有一個bug;至少它在參數驗證中失敗了。
https://blogs.msdn.microsoft.com/oldnewthing/20091210-00/?p=15713 –