; Disassembly of IsValidProperty method, called from IContextProperties::SetProperty
; Determines policy for what is a valid property VARIANT type

CUserProps::IsValidProperty:
; Put &vaValue in ecx
757953D5  mov         ecx,dword ptr [esp+4] 

; Put vaValue.vt in eax
757953D9  movzx       eax,word ptr [ecx] 

; Check for valid VARTYPE values
757953DC  cmp         eax,2   ; VT_I2?
757953DF  jl          CUserProps::IsValidProperty+27h (757953FCh) 
757953E1  cmp         eax,8   ; VT_BSTR?
757953E4  jle         CUserProps::IsValidProperty+36h (7579540Bh) 
757953E6  cmp         eax,9   ; VT_DISPATCH?
757953E9  je          CUserProps::IsValidProperty+2Ch (75795401h) 
757953EB  jle         CUserProps::IsValidProperty+27h (757953FCh) 
757953ED  cmp         eax,0Bh ; VT_BOOL?
757953F0  jle         CUserProps::IsValidProperty+36h (7579540Bh) 
757953F2  cmp         eax,0Dh ; VT_UNKNOWN?
757953F5  je          CUserProps::IsValidProperty+2Ch (75795401h) 
757953F7  cmp         eax,11h ; VT_UI1?
757953FA  je          CUserProps::IsValidProperty+36h (7579540Bh) 

; If none of the above, zero out return value (eax), and leave
; i.e. return FALSE;
757953FC  xor         eax,eax 
757953FE  ret         4    

; VT_DISPATCH and VT_UNKNOWN end up here - sets return value to 1 
; if value is non-NULL, and jumps back to ret instruction
; i.e. return (vaValue.punkVal != NULL);
75795401  xor         eax,eax 
75795403  cmp         dword ptr [ecx+8],eax 
75795406  setne       al   
75795409  jmp         CUserProps::IsValidProperty+29h (757953FEh) 

; Set return value to 1 and jump back to ret instruction
; i.e. return TRUE;
7579540B  xor         eax,eax 
7579540D  inc         eax  
7579540E  jmp         CUserProps::IsValidProperty+29h (757953FEh)