爲什麼最後一條語句拋出Access Violation?從C++中的位置讀取訪問衝突
我想將服務的狀態寫入XML文件。
#define STR_SERVICE_STATUS_INPUT__XML_CONTENT _T("<SERVICE NAME = \"%s\" STARTUP_TYPE = \"0x%d\" />\r\n\r\n")
CString csWriteBufferTemp;
DWORD dwBufferSize;
DWORD dwBytesNeeded;
SC_HANDLE schHandle;
LPQUERY_SERVICE_CONFIG st_lpqscServiceInfo;
schHandle = OpenService(IN_schHandle, (CString)cArgentServices[i], SERVICE_QUERY_CONFIG);
bRC = QueryServiceConfig(schHandle, NULL, 0, &dwBytesNeeded);
dwBufferSize = dwBytesNeeded; //Size needed.
st_lpqscServiceInfo = (LPQUERY_SERVICE_CONFIG) LocalAlloc(LMEM_FIXED, dwBufferSize);
bRC = QueryServiceConfig(schHandle, st_lpqscServiceInfo, dwBufferSize, &dwBytesNeeded);
csWriteBufferTemp.Format(STR_SERVICE_STATUS_INPUT__XML_CONTENT__,st_lpqscServiceInfo->lpDisplayName,0);
謝謝@TheUndeadFish的答覆,但仍然不能解決我的問題。我按照你的建議編輯了問題。 – sidx
@sidx如果格式崩潰,沒有太多的可能性。您是否驗證過st_lpqscServiceInfo正在分配並且大小正確?第二個QueryServiceConfig調用實際上是成功的嗎? st_lpqscServiceInfo-> lpDisplayName出錯了,這與現在您的代碼的唯一合理猜測有關。 – TheUndeadFish
在我的實際代碼中,我正在檢查所有'schHandle'值以查看調用是否成功。他們從不'空'。我也檢查'bRC's。 – sidx