[Bug 27708] New: GetThreadSelectorEntry fails

wine-bugs at winehq.org wine-bugs at winehq.org
Wed Jul 6 03:39:18 CDT 2011


http://bugs.winehq.org/show_bug.cgi?id=27708

           Summary: GetThreadSelectorEntry fails
           Product: Wine
           Version: 1.2.2
          Platform: x86
        OS/Version: Linux
            Status: UNCONFIRMED
          Severity: normal
          Priority: P2
         Component: ntdll
        AssignedTo: wine-bugs at winehq.org
        ReportedBy: nitsuja- at hotmail.com


Created an attachment (id=35459)
 --> (http://bugs.winehq.org/attachment.cgi?id=35459)
binary (and source code) of the test case

When a program calls GetThreadSelectorEntry after creating a process, it fails
in Wine (returns FALSE and sets lasterror to 5), but succeeds in Windows. This
is a problem for a program I made which needs this function to work, so I've
boiled it down to a tiny test case which still fails in the same way, and is
attached. When run on Windows, this exe brings up a messagebox saying "ALL OK",
but when run on Wine, it says "ERROR: GetThreadSelectorEntry failed". Here's
the source code:



#define WIN32_LEAN_AND_MEAN
#define _WIN32_WINNT 0x0500
#include <windows.h>
void AssertSuccess(BOOL success, const char* errorMessage);

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR
lpCmdLine, int nShowCmd)
{
    // it doesn't matter which exe I start, so for this example I use the
current exe path
    CHAR filename[MAX_PATH];
    GetModuleFileName(NULL, filename, MAX_PATH);
    STARTUPINFO startupInfo = {sizeof(STARTUPINFO)};
    PROCESS_INFORMATION processInfo = {};
    BOOL success = CreateProcess(filename, NULL, NULL, NULL, FALSE,
        CREATE_SUSPENDED | DEBUG_PROCESS,
        NULL, NULL, &startupInfo, &processInfo);
    AssertSuccess(success, "ERROR: CreateProcess failed.\n");
    HANDLE hThread = processInfo.hThread;

    CONTEXT context;
    context.ContextFlags = CONTEXT_SEGMENTS;
    success = GetThreadContext(hThread, &context);
    AssertSuccess(success, "ERROR: GetThreadContext failed.\n");

    LDT_ENTRY ldtEntry;
    success = GetThreadSelectorEntry(hThread, context.SegFs, &ldtEntry);
    AssertSuccess(success, "ERROR: GetThreadSelectorEntry failed.\n");

    if(success)
        MessageBox(NULL, "ALL OK.", "DONE", MB_ICONASTERISK);

    return success ? 0 : -1;
}

void AssertSuccess(BOOL success, const char* errorMessage)
{
    if(!success)
        MessageBox(NULL, errorMessage, "ERROR", MB_ICONERROR);
}

-- 
Configure bugmail: http://bugs.winehq.org/userprefs.cgi?tab=email
Do not reply to this email, post in Bugzilla using the
above URL to reply.
------- You are receiving this mail because: -------
You are watching all bug changes.



More information about the wine-bugs mailing list