0XC0030002

RPC_NT_SS_CHAR_TRANS_OPEN_FAIL (0XC0030002) Fix

Server & Cloud Intermediate 👁 1 views 📅 May 29, 2026

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 DCERPCCHARTRANS environment 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

  1. Check the DCERPCCHARTRANS environment variable.
    Open an elevated Command Prompt and run:
    echo %DCERPCCHARTRANS%
    If it returns anything other than %SystemRoot%\System32\ (or empty), you've found the problem. Clear it by running:
    setx DCERPCCHARTRANS "" /M
    The /M flag removes it from system-wide variables. Then restart the RPC service or reboot.
  2. Verify the ETL files exist.
    In the same elevated prompt, run:
    dir C:\Windows\System32\cvt*.etl
    You should see cvtbstr.etl and cvtintl.etl. If either is missing, copy them from a working Windows machine of the same version and build. Or run SFC:
    sfc /scannow
    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.
  3. 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 to C:\Windows\System32\ on the broken machine. I keep a spare copy of these ETL files in my toolset for exactly this reason.
  4. Check file permissions.
    Right-click C:\Windows\System32 → Properties → Security. Make sure SYSTEM and Administrators have Read & Execute permissions. If you're running an RPC service under NETWORK SERVICE or LOCAL SERVICE, those accounts need read access too. They inherit it by default, but if someone locked down permissions, they'll fail.
  5. 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 \ Application for source Microsoft-Windows-RPC or RpcSs. 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 DCERPC from 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 rpcping to test RPC connectivity:
    rpcping -t ncacn_ip_tcp -s <server>
    If that succeeds but your app fails, the issue is app-specific, not system-wide.
  • Consider the registry. I've rarely seen it, but HKLM\System\CurrentControlSet\Services\RpcSs\Parameters can contain a DCERPCCHARTRANS value. 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?