The following condition in _globalEnumeratorAdvance() looks incorrect:
for (; enumerator->providerIndex < providerTable->numProviders && !(enumerator->dwScope & providerTable->table [enumerator->providerIndex].dwEnumScopes); enumerator->providerIndex++)
I agree, that's not correct.
Other conditions and parameters look correctly. For example, function NPOpenEnum() expects a dwScope, containing RESOURCE_CONNECTED, RESOURCE_GLOBALNET or RESOURCE_CONTEXT.
Ah, you're right. It's only where dwEnumScopes is used that it's being used incorrectly.
Your patch should probably fix both of those, then (and please ignore my earlier comment.)
Thanks, --Juan