Using the RetryOpenServiceWithReadAccess Fix
Published: June 11, 2010
Updated: June 11, 2010
Applies To: Windows 7, Windows Vista
This section includes information about using the RetryOpenServiceWithReadAccess compatibility fix, including the issue details, the intercepted APIs, and the recommended fix for a permanent solution.
RetryOpenServiceWithReadAccess fixes an issue whereby an application attempts to open a service by requesting SERVICES_ALL_ACCESS or GENERIC_ALL. Due to the increased security in the Windows Vista operating system, this can cause issues as even administrators do not always have write permissions to a service.
This compatibility fix intercepts the ERROR_ACCESS_DENIED returned value and if the user is an administrator, will attempt to retry the call by requesting GENERIC_READ.
Investigating the Issue
Application-related issues that can be resolved by applying the RetryOpenServiceWithReadAccess fix are typically detected by using the Standard User Analyzer (SUA) tool, which is provided by the Application Compatibility Toolkit (ACT). SUA can detect if there are issues with the OpenService* APIs. However, it does not include automatic fixes for this issue.
The following APIs are intercepted by the RetryOpenServiceWithReadAccess compatibility fix.
Fixing Your Code
Applications should be modified to demand only the minimal amount of permissions required for an action. This modification can be done by changing the call to the OpenService* API.