Fixed enumeration failures with EnumServiceStatus, EnumServiceStatusEx and EnumDependentServices (#145)

pull/161/head
dahall 2020-07-13 08:39:38 -06:00
parent b3842a902a
commit e073e09526
2 changed files with 4 additions and 4 deletions

View File

@ -3012,7 +3012,7 @@ namespace Vanara.PInvoke
var mem = new SafeHGlobalHandle((int)sz);
if (!EnumDependentServices(hService, dwServiceState, (IntPtr)mem, (uint)mem.Size, out sz, out cnt))
Win32Error.ThrowLastError();
return mem.ToEnumerable<ENUM_SERVICE_STATUS>((int)cnt);
return mem.ToArray<ENUM_SERVICE_STATUS>((int)cnt);
}
/// <summary>
@ -3128,7 +3128,7 @@ namespace Vanara.PInvoke
res = EnumServicesStatus(hSCManager, dwServiceType, dwServiceState, (IntPtr)mem, sz, out sz, out var cnt, ref hRes);
if (!res && (lastErr = Win32Error.GetLastError()) != Win32Error.ERROR_MORE_DATA)
lastErr.ThrowIfFailed();
foreach (var i in mem.ToEnumerable<ENUM_SERVICE_STATUS>((int)cnt))
foreach (var i in mem.ToArray<ENUM_SERVICE_STATUS>((int)cnt))
yield return i;
} while (!res);
}
@ -3270,7 +3270,7 @@ namespace Vanara.PInvoke
res = EnumServicesStatusEx(hSCManager, 0, dwServiceType, dwServiceState, (IntPtr)mem, sz, out sz, out var cnt, ref hRes, pszGroupName);
if (!res && (lastErr = Win32Error.GetLastError()) != Win32Error.ERROR_MORE_DATA)
lastErr.ThrowIfFailed();
foreach (var i in mem.ToEnumerable<ENUM_SERVICE_STATUS_PROCESS>((int)cnt))
foreach (var i in mem.ToArray<ENUM_SERVICE_STATUS_PROCESS>((int)cnt))
yield return i;
} while (!res);
}

View File

@ -113,7 +113,7 @@ namespace Vanara.PInvoke.Tests
[Test]
public void EnumServicesStatusExTest()
{
var l = EnumServicesStatusEx(hSvcMgr, ServiceTypes.SERVICE_DRIVER, SERVICE_STATE.SERVICE_ACTIVE);
var l = EnumServicesStatusEx(hSvcMgr); //, ServiceTypes.SERVICE_DRIVER, SERVICE_STATE.SERVICE_ACTIVE);
TestContext.WriteLine(string.Join("; ", l.Select(i => i.lpDisplayName)));
Assert.That(l, Is.Not.Empty);
}