mirror of https://github.com/dahall/Vanara.git
Fixed enumeration failures with EnumServiceStatus, EnumServiceStatusEx and EnumDependentServices (#145)
parent
b3842a902a
commit
e073e09526
|
@ -3012,7 +3012,7 @@ namespace Vanara.PInvoke
|
||||||
var mem = new SafeHGlobalHandle((int)sz);
|
var mem = new SafeHGlobalHandle((int)sz);
|
||||||
if (!EnumDependentServices(hService, dwServiceState, (IntPtr)mem, (uint)mem.Size, out sz, out cnt))
|
if (!EnumDependentServices(hService, dwServiceState, (IntPtr)mem, (uint)mem.Size, out sz, out cnt))
|
||||||
Win32Error.ThrowLastError();
|
Win32Error.ThrowLastError();
|
||||||
return mem.ToEnumerable<ENUM_SERVICE_STATUS>((int)cnt);
|
return mem.ToArray<ENUM_SERVICE_STATUS>((int)cnt);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -3128,7 +3128,7 @@ namespace Vanara.PInvoke
|
||||||
res = EnumServicesStatus(hSCManager, dwServiceType, dwServiceState, (IntPtr)mem, sz, out sz, out var cnt, ref hRes);
|
res = EnumServicesStatus(hSCManager, dwServiceType, dwServiceState, (IntPtr)mem, sz, out sz, out var cnt, ref hRes);
|
||||||
if (!res && (lastErr = Win32Error.GetLastError()) != Win32Error.ERROR_MORE_DATA)
|
if (!res && (lastErr = Win32Error.GetLastError()) != Win32Error.ERROR_MORE_DATA)
|
||||||
lastErr.ThrowIfFailed();
|
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;
|
yield return i;
|
||||||
} while (!res);
|
} 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);
|
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)
|
if (!res && (lastErr = Win32Error.GetLastError()) != Win32Error.ERROR_MORE_DATA)
|
||||||
lastErr.ThrowIfFailed();
|
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;
|
yield return i;
|
||||||
} while (!res);
|
} while (!res);
|
||||||
}
|
}
|
||||||
|
|
|
@ -113,7 +113,7 @@ namespace Vanara.PInvoke.Tests
|
||||||
[Test]
|
[Test]
|
||||||
public void EnumServicesStatusExTest()
|
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)));
|
TestContext.WriteLine(string.Join("; ", l.Select(i => i.lpDisplayName)));
|
||||||
Assert.That(l, Is.Not.Empty);
|
Assert.That(l, Is.Not.Empty);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue