def get_cpuid_leaf(self, idx, idx_sub):
        """Returns the virtual CPU cpuid information for the specified leaf.
        
        Currently supported index values for cpuid:
        Standard CPUID leaves: 0 - 0x1f
        Extended CPUID leaves: 0x80000000 - 0x8000001f
        VIA CPUID leaves:      0xc0000000 - 0xc000000f
        
        See the Intel, AMD and VIA programmer's manuals for detailed information
        about the CPUID instruction and its leaves.

        in idx of type int
            CPUID leaf index.

        in idx_sub of type int
            CPUID leaf sub-index (ECX).  Set to 0xffffffff (or 0) if not applicable.

        out val_eax of type int
            CPUID leaf value for register eax.

        out val_ebx of type int
            CPUID leaf value for register ebx.

        out val_ecx of type int
            CPUID leaf value for register ecx.

        out val_edx of type int
            CPUID leaf value for register edx.

        raises :class:`OleErrorInvalidarg`
            Invalid index.
        
        """
        if not isinstance(idx, baseinteger):
            raise TypeError("idx can only be an instance of type baseinteger")
        if not isinstance(idx_sub, baseinteger):
            raise TypeError("idx_sub can only be an instance of type baseinteger")
        (val_eax, val_ebx, val_ecx, val_edx) = self._call("getCPUIDLeaf",
                     in_p=[idx, idx_sub])
        return (val_eax, val_ebx, val_ecx, val_edx)