Stránka 19 z 27

Napsal: 25 led 2026, 16:27
od lesana87
Sud kulatý.

Napsal: 25 led 2026, 16:37
od asdf
Rys tu pije. Tak ten, co nás zajímá, se volá zrovna odjinud. Škoda.

Napsal: 25 led 2026, 16:47
od asdf
Tak jeste prosim nalicit pasticku do wine-10.0/dlls/ntdll/threadpool.c. Je to tam 3x.
Na radce asi 790:

Kód: Vybrat vše

    RtlInitializeCriticalSection(&q->cs);
    list_init(&q->timers);
    q->quit = FALSE;
    q->magic = TIMER_QUEUE_MAGIC;
MESSAGE("pokus create_event ntdll threadpool 1\n");
    status = NtCreateEvent(&q->event, EVENT_ALL_ACCESS, NULL, SynchronizationEvent, FALSE);
    if (status != STATUS_SUCCESS)
    {
        RtlFreeHeap(GetProcessHeap(), 0, q);
        return status;
    }
Na radce asi tak 1027:

Kód: Vybrat vše

    if (!Timer)
        return STATUS_INVALID_PARAMETER_1;
    q = t->q;
    if (CompletionEvent == INVALID_HANDLE_VALUE)
    {
MESSAGE("pokus create_event ntdll threadpool 2\n");
        status = NtCreateEvent(&event, EVENT_ALL_ACCESS, NULL, SynchronizationEvent, FALSE);
        if (status == STATUS_SUCCESS)
            status = STATUS_PENDING;
    }
    else if (CompletionEvent)
        event = CompletionEvent;
A na radce kolem 1472:

Kód: Vybrat vše

    bucket->objcount = 0;
    bucket->alertable = alertable;
    list_init( &bucket->reserved );
    list_init( &bucket->waiting );

MESSAGE("pokus create_event ntdll threadpool 3\n");
    status = NtCreateEvent( &bucket->update_event, EVENT_ALL_ACCESS,
                            NULL, SynchronizationEvent, FALSE );
    if (status)
    {
        RtlFreeHeap( GetProcessHeap(), 0, bucket );
        goto out;
    }

Napsal: 25 led 2026, 17:04
od lesana87
Přijde mi, že se nic nezměnilo.

Napsal: 25 led 2026, 17:23
od asdf
No, nezměnilo. Ještě tam je pár míst, odkud se to volá, ale ty mi připadaly míň pravděpodobný.

Napsal: 25 led 2026, 17:26
od lesana87
A co se z nich má volat, po čem jdeš?

Napsal: 25 led 2026, 17:28
od asdf
Ta funkce NtCreateEvent. To je to volání serveru s číslem 30, po kterým to hned spadne.

Napsal: 25 led 2026, 17:38
od lesana87
A jakto že na začátku to po té třicítce nespadne?

Napsal: 25 led 2026, 17:41
od asdf
Ono to asi spadne v některém klientovi a ne na serveru. Zavolá 30 a pak spadne. Ale ne každý klient.

Napsal: 25 led 2026, 17:53
od asdf
Tak jeste prosim policit v souboru wine-10.0/dlls/ntoskrnl.exe/sync.c. Je to tam 2x.
Na radce 221:

Kód: Vybrat vše

    TRACE( "(%s %p)\n", debugstr_us(name), ret_handle );

    InitializeObjectAttributes( &attr, name, 0, 0, NULL );
MESSAGE("pokus create_event ntoskrnl.exe sync 1\n");
    ret = NtCreateEvent( &handle, EVENT_ALL_ACCESS, &attr, SynchronizationEvent, TRUE );
    if (ret) return NULL;
A kolem radky 248:

Kód: Vybrat vše

    TRACE( "(%s %p)\n", debugstr_us(name), ret_handle );

    InitializeObjectAttributes( &attr, name, 0, 0, NULL );
MESSAGE("pokus create_event ntoskrnl.exe sync 2\n");
    ret = NtCreateEvent( &handle, EVENT_ALL_ACCESS, &attr, NotificationEvent, TRUE );
    if (ret) return NULL;
Uz tech moznosti moc nezbyva.

Napsal: 25 led 2026, 18:05
od lesana87
Asi nic, log má pořád stejně bytů, tak to sem asi nebudu ani dávat.

Napsal: 25 led 2026, 19:45
od asdf
Aha. Chyták. V tom programu wineboot se to tím fprintf(stderr, ... ); nezaloguje, ale když se dá místo toho MESSAGE( ... );, tak to zaloguje. Tak použijeme všude MESSAGE. Takže, prosím tě, spust v wine-10.0 tohleto:

Kód: Vybrat vše

grep -RI "stderr.*pokus create_event" .
A ono to vypíše, kde je to třeba předělat z fprintf na MESSAGE. A tam kdybys to všude předělala.

Napsal: 25 led 2026, 20:30
od lesana87
Něco málo se změnilo.

Napsal: 25 led 2026, 20:38
od asdf
Tak máme zmapovaný všechny 30 kromě té, co nás zajímá. :( No, ještě tam pár míst je, které jsme nezmapovali.

Napsal: 25 led 2026, 21:05
od asdf
Ono to asi bude v wine-10.0/dlls/kernelbase/debug.c na radce 679:

Kód: Vybrat vše

	attr.Length                   = sizeof(attr);
	attr.RootDirectory            = 0;
	attr.Attributes               = OBJ_INHERIT;
	attr.ObjectName               = NULL;
	attr.SecurityDescriptor       = NULL;
	attr.SecurityQualityOfService = NULL;

	/* ask for manual reset, so that once the debugger is started,
	 * every thread will know it */
MESSAGE("pokus create_event kernelbase debug");
	NtCreateEvent( &event, EVENT_ALL_ACCESS, &attr, NotificationEvent, FALSE );
        if (InterlockedCompareExchangePointer( &once, event, 0 ) == 0)
	{
	    /* ok, our event has been set... we're the winning thread */
	    BOOL ret = start_debugger( epointers, once );