RPC_NT_SS_CHAR_TRANS_OPEN_FAIL (0XC0030002) Fix
This error means the RPC runtime couldn't open a character translation file. Usually caused by a missing or corrupted ETL file in the system32 folder.
When This Error Shows Up
You'll see RPC_NT_SS_CHAR_TRANS_OPEN_FAIL (error code 0XC0030002) when an RPC client or server tries to initialize a character translation table and fails. This typically happens during the first RPC call after boot, or when a Windows machine tries to authenticate against a domain controller using legacy RPC protocols. I've seen it on Windows Server 2016 domain controllers after a patch update, and on Windows 10 workstations that had their %SystemRoot%\system32 folder cleaned by some aggressive disk cleanup tool.
The error message says "The file designated by DCERPCCHARTRANS cannot be opened." DCERPCCHARTRANS is an environment variable that points to the character translation files. If that variable is set to a path that doesn't exist, or the file itself is missing, you get this error.
Root Cause
The RPC runtime uses a character translation table to convert between different character sets (like UTF-8 to UTF-16, or ISO 8859-1 to UTF-16) when handling remote procedure calls. This table is stored in an ETL file — cvtbstr.etl or cvtintl.etl — located in C:\Windows\System32\. The environment variable DCERPCCHARTRANS tells the RPC runtime where to find these files.
What's actually happening here is that either:
- The
DCERPCCHARTRANSenvironment variable is set to a non-existent directory - One or both of the ETL files (
cvtbstr.etl,cvtintl.etl) are missing or corrupted - The process running the RPC call doesn't have read permissions on
%SystemRoot%\System32\
The reason step 3 matters is that if you're running an RPC service under a low-privilege account or inside a container with restricted access, it can't read the ETL files even if they exist.
Fix Steps
- Check the DCERPCCHARTRANS environment variable.
Open an elevated Command Prompt and run:
If it returns anything other thanecho %DCERPCCHARTRANS%%SystemRoot%\System32\(or empty), you've found the problem. Clear it by running:
Thesetx DCERPCCHARTRANS "" /M/Mflag removes it from system-wide variables. Then restart the RPC service or reboot. - Verify the ETL files exist.
In the same elevated prompt, run:
You should seedir C:\Windows\System32\cvt*.etlcvtbstr.etlandcvtintl.etl. If either is missing, copy them from a working Windows machine of the same version and build. Or run SFC:
This will replace corrupted or missing system files, including these ETL files. SFC won't fix them if they were manually deleted by a third-party cleaner — in that case, you need the source files from a healthy system.sfc /scannow - Restore missing files from a known-good source.
If SFC doesn't fix it (it sometimes doesn't pick these up), grab the files from another machine with the exact same Windows version. Copy them toC:\Windows\System32\on the broken machine. I keep a spare copy of these ETL files in my toolset for exactly this reason. - Check file permissions.
Right-clickC:\Windows\System32→ Properties → Security. Make sureSYSTEMandAdministratorshave Read & Execute permissions. If you're running an RPC service underNETWORK SERVICEorLOCAL SERVICE, those accounts need read access too. They inherit it by default, but if someone locked down permissions, they'll fail. - Reboot after applying changes.
RPC runtime caches the character translation table location at boot. A simple service restart doesn't clear that cache. You need a full reboot for the fix to stick.
What to Check If It Still Fails
- Check the Application event log for additional clues. Look under
Windows Logs \ Applicationfor sourceMicrosoft-Windows-RPCorRpcSs. The event details often include the exact file path it tried to open. - Verify no third-party software is overriding DCERPCCHARTRANS. Some legacy apps or Samba configurations set this variable. Run
set | findstr DCERPCfrom a command prompt as the same user that triggers the error. If you see a value, that process has a local override. - Test with a minimal RPC call. Use
rpcpingto test RPC connectivity:
If that succeeds but your app fails, the issue is app-specific, not system-wide.rpcping -t ncacn_ip_tcp -s <server> - Consider the registry. I've rarely seen it, but
HKLM\System\CurrentControlSet\Services\RpcSs\Parameterscan contain aDCERPCCHARTRANSvalue. It shouldn't be there by default. Delete it if present.
This error is almost always a missing or inaccessible ETL file. Fix that, and you're done. Don't waste time on firewall rules or DCOM settings — they won't help here.
Was this solution helpful?