Dosbox

Software potřebné k práci s elektronikou

Moderátor: Moderátoři

Odpovědět
Zpráva
Autor
Uživatelský avatar
lesana87
Příspěvky: 4397
Registrován: 20 zář 2014, 00:00

#271 Příspěvek od lesana87 »

Sud kulatý.
Naposledy upravil(a) lesana87 dne 25 led 2026, 17:04, celkem upraveno 1 x.
Uživatelský avatar
asdf
Příspěvky: 707
Registrován: 06 říj 2022, 00:00
Kontaktovat uživatele:

#272 Příspěvek od asdf »

Rys tu pije. Tak ten, co nás zajímá, se volá zrovna odjinud. Škoda.
Uživatelský avatar
asdf
Příspěvky: 707
Registrován: 06 říj 2022, 00:00
Kontaktovat uživatele:

#273 Příspěvek 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;
    }
Uživatelský avatar
lesana87
Příspěvky: 4397
Registrován: 20 zář 2014, 00:00

#274 Příspěvek od lesana87 »

Přijde mi, že se nic nezměnilo.
Naposledy upravil(a) lesana87 dne 25 led 2026, 20:30, celkem upraveno 1 x.
Uživatelský avatar
asdf
Příspěvky: 707
Registrován: 06 říj 2022, 00:00
Kontaktovat uživatele:

#275 Příspěvek 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ý.
Uživatelský avatar
lesana87
Příspěvky: 4397
Registrován: 20 zář 2014, 00:00

#276 Příspěvek od lesana87 »

A co se z nich má volat, po čem jdeš?
Uživatelský avatar
asdf
Příspěvky: 707
Registrován: 06 říj 2022, 00:00
Kontaktovat uživatele:

#277 Příspěvek od asdf »

Ta funkce NtCreateEvent. To je to volání serveru s číslem 30, po kterým to hned spadne.
Uživatelský avatar
lesana87
Příspěvky: 4397
Registrován: 20 zář 2014, 00:00

#278 Příspěvek od lesana87 »

A jakto že na začátku to po té třicítce nespadne?
Uživatelský avatar
asdf
Příspěvky: 707
Registrován: 06 říj 2022, 00:00
Kontaktovat uživatele:

#279 Příspěvek 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.
Uživatelský avatar
asdf
Příspěvky: 707
Registrován: 06 říj 2022, 00:00
Kontaktovat uživatele:

#280 Příspěvek 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.
Uživatelský avatar
lesana87
Příspěvky: 4397
Registrován: 20 zář 2014, 00:00

#281 Příspěvek od lesana87 »

Asi nic, log má pořád stejně bytů, tak to sem asi nebudu ani dávat.
Uživatelský avatar
asdf
Příspěvky: 707
Registrován: 06 říj 2022, 00:00
Kontaktovat uživatele:

#282 Příspěvek 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.
Uživatelský avatar
lesana87
Příspěvky: 4397
Registrován: 20 zář 2014, 00:00

#283 Příspěvek od lesana87 »

Něco málo se změnilo.
Naposledy upravil(a) lesana87 dne 26 led 2026, 19:18, celkem upraveno 1 x.
Uživatelský avatar
asdf
Příspěvky: 707
Registrován: 06 říj 2022, 00:00
Kontaktovat uživatele:

#284 Příspěvek 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.
Uživatelský avatar
asdf
Příspěvky: 707
Registrován: 06 říj 2022, 00:00
Kontaktovat uživatele:

#285 Příspěvek 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 );
Odpovědět

Zpět na „Software“