Windows error 0x00000047, 71

Detailed Error Information


MessageNo more connections can be made to this remote computer at this time because there are already as many connections as the computer can accept.
Declared inwinerror.h

This appears to be a raw Win32 error. More information may be available in error 0x80070047.


This is a Blue Screen of Death stop code. More information is available in the Knowledge Base article Bug Check 0x47: REF_UNKNOWN_LOGON_SESSION.

HRESULT analysis[3]

This is probably not the correct interpretation of this error. The Win32 error above is more likely to indicate the actual problem.

This code indicates success, rather than an error. This may not be the correct interpretation of this code, or possibly the program is handling errors incorrectly.

Reserved (R)false
Reserved (X)false
FacilityCode0 (0x000)
DescriptionThe default facility code.[3][1]
Error Code71 (0x0047)

Possible solutions


Are there any default values for registers?


Depends on the platform, language, and/or calling convention. But yeah, the code before this normally should have set EAX to some value. EAX is one of those registers that's modified so often that it's not normally used for keeping stuff around in.

The instructions look kinda random. In particular, the "dec esp" is normally a huge no-no, as the stack should always be dword-aligned. Are you sure this is actual code? The instruction bytes translate to "\x7fELF" if i'm translating right, which suggests to me that this is just the header bytes of a Linux program, not actual code bytes.

answered on Stack Overflow Nov 10, 2010 by cHao • edited Nov 10, 2010 by cHao

Are there any default values for registers?


I think what you are really asking about is calling convention, which describes how subroutines in a program pass information to one another, and how the operating system passes information to the program, and in general what the different registers are supposed to mean.

For example, the cdecl calling convention on the x86, which is used by most C compilers, says that when a function returns, the return value value goes on the eax register. So if you have a function int foo(), you know that after foo executes its ret opcode, eax will contain that int that foo returned.

By contrast, the PowerPC processor (usually) has (at least) 32 registers, simply named r0, r1, ... r31. The AIX calling convention for this chip says that the stack pointer goes on r1, that function parameters get passed on r3 through r11, that return values come back on r3, and so on.

It is important to remember that a calling convention is sort of like an agreement between the functions in a program, or between libraries. It isn't part of the hardware, or a law, and there are usually many different calling conventions that may be used on a platform. This is why sometimes you will see code like

struct CFoo {  void __stdcall method(); };

That is an instruction to MSVC, which usually likes to use the fastcall convention, telling it to use a different convention for that one function. This is important if eg the function is defined in a library that was built by some other compiler which uses stdcall instead.

When we talk about how the operating system passes information to a program (or the hardware to the operating system), we usually call it an ABI instead of a calling convention, but it is the same idea. So in the case of your program, it was written assuming that the OS would pass it some particular piece of information on eax. That assumption would be particular to the operating system, the compiler, and possibly even the individual program.

answered on Stack Overflow Nov 10, 2010 by Crashworks

Are there any default values for registers?


Some instructions implicitly update the registers, even if the destinations aren't listed explicitly in the code. Some examples:

  • cpuid returns values in eax, ebx, ecx and edx
  • loop decrements ecx
  • rep string instructions change ecx, edi and esi
  • rdmsr changes eax and edx
  • mul and div change eax and edx

And there are many other examples.

You can't assume just by seeing that eax isn't listed in the code that it's not changed.

Even assuming you know which registers are affected by which instructions, the only times you have any guarantee for a value are:

  • after an instruction that you know updates it
  • immediately after hardware reset

At any other time, you can never make assumptions on the values.

answered on Stack Overflow Nov 10, 2010 by Nathan Fellman

Visual Studio won't show the string values in address, specified by label in address box


The 0x47 that you see is the ascii code of letter G so when you've entered the label name it will try to convert it to an address and display it. If you want to see the content of the label try &greeting1.

answered on Stack Overflow Aug 9, 2017 by Paweł Łukasik

Are there any default values for registers?


It doesn't seem to be valid code. Are you sure it wasn't text?

Decoding it as 32bit x86 gives string ELF :

00: 7F 45  // 0x7F E
02: 4C     // L
03: 46     // F
04: 01 01  // ?? ??

Try opening the file as ELF file and not as just binary.

answered on Stack Overflow Nov 10, 2010 by ruslik

Change display format of DirectX "Object Table"


You need to change the format through the Graphics Object Table (menu Debug > Graphics > Object Table).

Select your index buffer in the table and then change its format using the Buffer Format combo box at the top of the Graphics Object Table.

answered on Stack Overflow Jul 27, 2013 by AkisK

Windows Phone App crashes after Launcher.LaunchFileAsync when downloaded from store


Looks like you failed to use LaunchFileAsync/FileOpenPicker correctly. Follow this guide carefully.

Unless debugging, OS terminates your process just after you've called the picker (especially on low-memory devices with 512MB RAM). It's up to your application to save its state, and when reactivated restore the state and take user to the exact place in your app where she was.

Also, here’s how you can debug the problem.

answered on Stack Overflow May 29, 2015 by Soonts • edited May 23, 2017 by Community

C++ How can i fill the bit fields of a struct from a uchar array?


You can do something like this:

struct  th_struct t_header = {
    .s_byte = 0x47,
    .t_e_indicator = 0,
    .p_u_s_indicator = 0,
    .t_priority = 0,
    .id = 0x00000493,
    .t_s_control = 0,
    .a_f_control = 1,
    .c_counter = 2 };

and then: const struct th_struct* tsh = &t_header;

I think it's easier.

You must change the way you assing for sometinh like this:

u_char t_header[4];
t_header[0] = 0x47;     // s_byte
t_header[1] = (u_char)
        (0x00           // t_e_indicator
         | (0x00 << 1)  // p_u_s_indicator
         | (0x00 << 2)  // t_priority
         | (0x493 << 3)); // id[0..4]
t_header[2] = (u_char) ((0x493 << 3) >> 8); // id [5..12]
t_header[3] = (u_char)
        (0x00           // t_s_control
        | (0x01 << 2)   // a_f_control
        | (0x02 << 4)); // c_counter

const struct th_struct* tsh = (th_struct*)t_header;

Or change the struct order:

#pragma pack(push, 1)
           typedef struct th_struct2 {
               unsigned s_byte : 8;
               unsigned id1 : 5;
               unsigned t_e_indicator : 1;
               unsigned t_priority : 1;
               unsigned p_u_s_indicator : 1;
               unsigned id2 : 8;
               unsigned c_counter : 4;
               unsigned a_f_control : 2;
               unsigned t_s_control : 2;
           #pragma pack(pop)

where id1 is the higher part od id, and id2 the lower part.

answered on Stack Overflow Dec 19, 2016 by JMA • edited Dec 19, 2016 by JMA

C++ How can i fill the bit fields of a struct from a uchar array?


First of all you have a problem here:

u_char *t_header[4];

That is 4 pointers - not 4 u_char. You probably want:

u_char t_header[4];

Next problem is that the layout of bit fields is implementation-dependent.

Consequently, it is a bad idea (in general) to write code that assumes a specific layout. Such code will only be able to run on the specific system used when writing the code, i.e., the code is non-portable.

I recommend that you use the shift operator >> and bitwise and operator & to pick exactly the bits needed:

unsigned char t_header[4] = {0x47, 0x04, 0x93, 0x12};
th_struct tsh;

tsh.s_byte = t_header[0];
tsh.t_e_indicator = (t_header[1] >> 7) & 0x1;
tsh.p_u_s_indicator = (t_header[1] >> 6) & 0x1;
tsh.t_priority = (t_header[1] >> 5) & 0x1; = ((unsigned)(t_header[1] & 0x1f) << 8) + t_header[2];
tsh.t_s_control = (t_header[3] >> 6) & 0x3;
tsh.a_f_control = (t_header[3] >> 4) & 0x3;
tsh.c_counter = t_header[3] & 0xf;

printf("s_byte=%x\n", tsh.s_byte);
printf("t_e_indicator=%x\n", tsh.t_e_indicator);
printf("p_u_s_indicator=%x\n", tsh.p_u_s_indicator);
printf("t_priority=%x\n", tsh.t_priority);
printf("t_s_control=%x\n", tsh.t_s_control);
printf("a_f_control=%x\n", tsh.a_f_control);
printf("c_counter=%x\n", tsh.c_counter);

Then you can also avoid having a packed struct.

answered on Stack Overflow Dec 19, 2016 by 4386427 • edited Dec 19, 2016 by TriskalJM



Usually when I see this problem it is because SetWindowPos() needs to be called after setting the window style with a SetWindowLong() function. Changes will not be updated until SetWindowPos() is called, as detailed here:

It does not always seem to crash without calling SetWindowPos(), but will sometimes. I am not sure why the result is usually so sporadic. Either way the results will not update without that call.

answered on Stack Overflow Jan 17, 2013 by JayDoe

Strange stack trace in Windows Phone 8


In your case finding the Solution would be needed lots of surfing through sites and Search for the Description of Error codes and find solution for it or You can simply Analyze crash reports. you’ll receive a certification report that contains additional files that you can use to identify what happened. Depending on the type of error that occurred, you’ll receive either A crash dump file or An ErrorInfo file. To examine these files, Dev centre recommend that you use either Microsoft Visual Studio or the Windows Debugger Tools. Have Look over here Analyzing crash reports and Improving apps with Quality reports. Hope this help you out.

answered on Stack Overflow Jun 24, 2014 by A B


Leave a comment

(plain text only)


  1. winerror.h from Windows SDK 10.0.14393.0

User contributions licensed under CC BY-SA 3.0