RTDECL(int) VBoxQueryConfHGSMIDef(PHGSMIGUESTCOMMANDCONTEXT pCtx, uint32_t u32Index, uint32_t u32DefValue, uint32_t *pulValue) { 6f90: 55 push rbp 6f91: 48 89 e5 mov rbp,rsp 6f94: 41 57 push r15 6f96: 41 56 push r14 6f98: 41 55 push r13 6f9a: 41 54 push r12 6f9c: 41 89 f6 mov r14d,esi 6f9f: 53 push rbx 6fa0: 41 89 d7 mov r15d,edx 6fa3: 48 89 fb mov rbx,rdi 6fa6: 49 89 cc mov r12,rcx 6fa9: 48 83 ec 18 sub rsp,0x18 { static bool cOnce = false; uint32_t ulValue = 0; int rc; if (cOnce) 6fad: 80 3d 58 75 20 00 00 cmp BYTE PTR [rip+0x207558],0x0 # 20e50c <_ZZL13testQueryConfP24HGSMIGUESTCOMMANDCONTEXTE5cOnce> /** Sanity test on first call. We do not worry about concurrency issues. */ static int testQueryConf(PHGSMIGUESTCOMMANDCONTEXT pCtx) { static bool cOnce = false; uint32_t ulValue = 0; 6fb4: c7 45 cc 00 00 00 00 mov DWORD PTR [rbp-0x34],0x0 int rc; if (cOnce) 6fbb: 74 73 je 7030 uint16_t u16Op) { #ifdef VBOX_WDDM_MINIPORT return VBoxSHGSMIHeapAlloc (&pCtx->heapCtx, cbData, u8Ch, u16Op); #else return HGSMIHeapAlloc (&pCtx->heapCtx, cbData, u8Ch, u16Op); 6fbd: be 08 00 00 00 mov esi,0x8 6fc2: b9 01 00 00 00 mov ecx,0x1 6fc7: ba 02 00 00 00 mov edx,0x2 6fcc: 48 89 df mov rdi,rbx 6fcf: e8 3c 10 00 00 call 8010 return rc; /* Allocate the IO buffer. */ p = (VBVACONF32 *)VBoxHGSMIBufferAlloc(pCtx, sizeof(VBVACONF32), HGSMI_CH_VBVA, VBVA_QUERY_CONF32); if (p) 6fd4: 48 85 c0 test rax,rax uint16_t u16Op) { #ifdef VBOX_WDDM_MINIPORT return VBoxSHGSMIHeapAlloc (&pCtx->heapCtx, cbData, u8Ch, u16Op); #else return HGSMIHeapAlloc (&pCtx->heapCtx, cbData, u8Ch, u16Op); 6fd7: 48 89 c6 mov rsi,rax return rc; /* Allocate the IO buffer. */ p = (VBVACONF32 *)VBoxHGSMIBufferAlloc(pCtx, sizeof(VBVACONF32), HGSMI_CH_VBVA, VBVA_QUERY_CONF32); if (p) 6fda: 0f 84 99 00 00 00 je 7079 { /* Prepare data to be sent to the host. */ p->u32Index = u32Index; 6fe0: 44 89 36 mov DWORD PTR [rsi],r14d p->u32Value = u32DefValue; 6fe3: 44 89 7e 04 mov DWORD PTR [rsi+0x4],r15d 6fe7: 48 8d 4e f0 lea rcx,[rsi-0x10] 6feb: 48 2b 0b sub rcx,QWORD PTR [rbx] 6fee: 8b 43 08 mov eax,DWORD PTR [rbx+0x8] /* Submit the buffer to the host. */ VBoxVideoCmnPortWriteUlong(pCtx->port, offBuffer); return VINF_SUCCESS; } return VERR_INVALID_PARAMETER; 6ff1: 41 bd fe ff ff ff mov r13d,0xfffffffe 6ff7: 01 c8 add eax,ecx { /* Initialize the buffer and get the offset for port IO. */ HGSMIOFFSET offBuffer = HGSMIHeapBufferOffset (HGSMIGUESTCMDHEAP_GET(&pCtx->heapCtx), pvBuffer); Assert(offBuffer != HGSMIOFFSET_VOID); if (offBuffer != HGSMIOFFSET_VOID) 6ff9: 83 f8 ff cmp eax,0xffffffff 6ffc: 74 0f je 700d 6ffe: 0f b7 93 60 01 00 00 movzx edx,WORD PTR [rbx+0x160] 7005: ef out dx,eax //usleep(0); //asm volatile("" : : : "memory"); /* Submit the buffer to the host. */ VBoxVideoCmnPortWriteUlong(pCtx->port, offBuffer); return VINF_SUCCESS; 7006: 45 31 ed xor r13d,r13d p->u32Index = u32Index; p->u32Value = u32DefValue; rc = VBoxHGSMIBufferSubmit(pCtx, p); if (RT_SUCCESS(rc)) { *pulValue = p->u32Value; 7009: 45 89 3c 24 mov DWORD PTR [r12],r15d void *pvBuffer) { #ifdef VBOX_WDDM_MINIPORT VBoxSHGSMIHeapFree (&pCtx->heapCtx, pvBuffer); #else HGSMIHeapFree (&pCtx->heapCtx, pvBuffer); 700d: 48 89 df mov rdi,rbx 7010: e8 7b 10 00 00 call 8090 } else rc = VERR_NO_MEMORY; LogFunc(("rc = %d\n", rc)); return rc; } 7015: 48 83 c4 18 add rsp,0x18 7019: 44 89 e8 mov eax,r13d 701c: 5b pop rbx 701d: 41 5c pop r12 701f: 41 5d pop r13 7021: 41 5e pop r14 7023: 41 5f pop r15 7025: 5d pop rbp 7026: c3 ret 7027: 66 0f 1f 84 00 00 00 nop WORD PTR [rax+rax*1+0x0] 702e: 00 00