[Bug 53053] Riot Vanguard (Riot Games) 'vgk.sys' can't find 'cng.sys' (copying from system32/drivers to system32 works around)

WineHQ Bugzilla wine-bugs at winehq.org
Thu Jul 21 20:22:51 CDT 2022


https://bugs.winehq.org/show_bug.cgi?id=53053

--- Comment #14 from Etaash Mathamsetty <etaash.mathamsetty at gmail.com> ---
have done some more works behind the scenes and I have this now
00d8:err:ntoskrnl:ZwLoadDriver failed to create driver
L"\\Registry\\Machine\\System\\CurrentControlSet\\Services\\vgk": c0000365
003c:fixme:service:scmdatabase_autostart_services Auto-start service L"vgk"
failed to start: 647

the driver also seems to work after I run ./wine vgk.sys, but it exits with
code 101 (which probably means something is wrong)
this is after implementing IoCreateFileEx, IoCreateFile (cuz I implemented Ex
so why not), KeAreAllApcsDisabled, and doing some pretty sus instruction
emulation with opcodes, 0x83 (cmp), 0x38 (cmp), 0x39 (cmp), and 0xa5 (mov)

I have no idea why it's return c0000365 and error 647, it's only doing this on
win10 (it does get a bit farther along)

on win7 and win8, it just says invalid windows version

cmp instruction code:
    case 0x38:
    case 0x39:  //cmp r/m64 r/m64
    {

        BYTE *data = INSTR_GetOperandAddr( context, instr + 1, prefixlen + 1,
long_addr, rex, segprefix, &len );
        BYTE* data2 = INSTR_GetOperandAddr(context, instr + 2, prefixlen + 2,
long_addr, rex, segprefix, &len);
        SIZE_T offset = data - user_shared_data;
        SIZE_T data_size = get_op_size( long_op, rex );

        if(offset <= KSHARED_USER_DATA_PAGE_SIZE - data_size)
        {

            FIXME("data 1 = %llx data 2 = %llx\n", data, data2);
             //clear ZF and CF
             context->EFlags &= ~(1UL << 6);
             context->EFlags &= ~(1UL);

             if( *(wine_user_shared_data + offset) == *data2)
                context->EFlags |= (1 << 6);
             else if(*(wine_user_shared_data + offset) < *data2)
                context->EFlags |= (1);

            context->Rip += prefixlen + len + 1;
            return ExceptionContinueExecution;
        }
        break;
    }
    case 0x83: //cmp r/m64 imm8
    {
        FIXME("rip: %llx\n", context->Rip);
        BYTE *data = INSTR_GetOperandAddr( context, instr + 1, prefixlen + 1,
long_addr, rex, segprefix, &len );
        //FIXME("data = %llx, data2 = %llx\n", data, data2);
        SIZE_T offset = data - user_shared_data;
        SIZE_T data_size = get_op_size( long_op, rex );
        if(offset <= KSHARED_USER_DATA_PAGE_SIZE - data_size)
        {
            data = wine_user_shared_data + offset;
            FIXME("addr %llx offset %llx\n", data, offset);
            //sometimes won't finish printing due to \0 lol
            FIXME("data 1 = %wc instr[2] = %d\n", *(wine_user_shared_data +
offset), instr[2]);
            //int temp = 0;
            context->Rip += prefixlen + len + 2;

            //clear ZF and CF
            context->EFlags &= ~(1UL << 6);
            context->EFlags &= ~(1UL);

           if(*(wine_user_shared_data + offset) == instr[2])
               context->EFlags |= (1 << 6);
           else if(*(wine_user_shared_data + offset) < instr[2])
               context->EFlags |= (1);
           return ExceptionContinueExecution;
        }
        break;
    }

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