gpt4 book ai didi

C++ 奇怪的 c0000005 错误

转载 作者:太空宇宙 更新时间:2023-11-04 14:46:35 24 4
gpt4 key购买 nike

我正在做一个可以在 winlogon 桌面上启动程序的项目。该程序在调试时运行完美,但是当我在 ide 之外启动它时,它因臭名昭著的 c0000005 错误而严重失败。最奇怪的是它似乎没有出现在任何特定的线路上。这是代码:

#include "stdafx.h"
#include <windows.h>
#include "BinRes.h"
#include <string>
#include <iostream>

int main(int argc, char* argv[])
{
if(argc != 2)
{
return 0;
}

std::string a;
a.append(BinRes::getAppLocation());
a.append("\\wls.exe");
BinRes::ExtractBinResource("EXE",102,"wls.exe");
Sleep(500);
SC_HANDLE schsm;
schsm = OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);
SC_HANDLE schs;
schs = CreateService(schsm,"WLS","WLS",SERVICE_ALL_ACCESS,SERVICE_WIN32_OWN_PROCESS|SERVICE_INTERACTIVE_PROCESS,SERVICE_DEMAND_START,NULL,a.c_str(),0,0,0,0,0);
char* cd = argv[1];
LPCSTR* arg = (LPCSTR*)&cd;
StartService(schs,1,arg);
HANDLE endevent;
endevent = OpenEvent(EVENT_ALL_ACCESS,TRUE,"ENDWLS");
WaitForSingleObject(endevent,INFINITE);
SERVICE_STATUS ss;
QueryServiceStatus(schs,&ss);
if(ss.dwCurrentState != SERVICE_STOPPED)
{
LPSERVICE_STATUS xyz = (LPSERVICE_STATUS)malloc(sizeof(LPSERVICE_STATUS));
ControlService(schs,SERVICE_CONTROL_STOP,xyz);
}
DeleteService(schs);
//error occurs right here
DeleteFile(a.c_str());
return 0;
}

错误总是发生在 DeleteService 之后和下一行之前,但我确定它不是 DeleteService,因为服务已被删除。我尝试注释掉 DeleteService 和 DeleteFile 但它仍然崩溃。我敢肯定我犯了一些愚蠢的错误,我只是瞎了眼。在此先感谢您的帮助!

最佳答案

我认为问题在于

LPSERVICE_STATUS xyz = (LPSERVICE_STATUS)malloc(sizeof(LPSERVICE_STATUS));
ControlService(schs,SERVICE_CONTROL_STOP,xyz);

部分。 ControlService 的最后一个参数 xyz 由该 API 用于返回有关服务的状态信息。您实际上在这里传递了一个指向 pointer 大小的内存区域的指针,该内存区域太小而无法容纳 ControlService 想要填充的所有值。恕我直言,您被咬了在运行时,因为执行 ControlService 调用将在 malloc 分配的指针空间之后直接覆盖随机内存。

尝试

SERVICE_STATUS xyz;
memset(&xyz, 0, sizeof(xyz));
ControlService(schs, SERVICE_CONTROL_STOP, &xyz);

相反。这里不需要动态分配结构。根据documentation , ControlService 只会用它来返回状态信息;它不会存储在 Windows 内部数据结构中的某个位置。

更多关于结构的内容可以在MS documentation .不知道,为什么它可能在调试期间起作用。也许,与生产版本 malloc 相比,用于调试的 malloc 行为略有不同?

关于C++ 奇怪的 c0000005 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1256584/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com