¿Donde esta el bug?
#include <Windows.h>
//
// ¿Por qué se da el bug en este código?
// ¿De quien consideramos que es el bug en este caso?
//
void main()
{
SC_HANDLE ScManager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
if (ScManager != NULL)
{
SC_HANDLE ScService = OpenServiceW(ScManager, L"ACPI", SERVICE_ALL_ACCESS);
if (ScService != NULL)
{
DWORD bufsize = 0;
if (QueryServiceConfigW(ScService, NULL, 0, &bufsize) == 0)
{
if (GetLastError() == ERROR_INSUFFICIENT_BUFFER)
{
BYTE * buffer = (BYTE*)calloc(1, bufsize + 1);
if (buffer != NULL)
{
QUERY_SERVICE_CONFIGW * query = (QUERY_SERVICE_CONFIGW *)(buffer + 1);
QueryServiceConfigW(ScService, query, bufsize, &bufsize);
free(buffer);
}
}
}
CloseServiceHandle(ScService);
}
CloseServiceHandle(ScManager);
}
}
Os recomendamos compilar y ejecutar el codigo 🙂