一个VB API的有关问题:VirtualQueryEx返回值为什么总是0

一个VB API的问题:VirtualQueryEx返回值为什么总是0?
下面这段代码相信很多人都看过,为什么我得到的ret全都为0?
调试结果:OpenProcess成功返回,运行到VirtualQueryEx时总返回0

Public   Function   GetTotalCommittedMemory(ByVal   ProcessId   As   Long)   As   Long
        Dim   hProcess   As   Long
        Dim   mi   As   MEMORY_BASIC_INFORMATION
        Dim   pAddr   As   Long
        Dim   dwTotalCommit   As   Long
        Dim   ret   As   Long
        Dim   miLen   As   Long
        miLen   =   Len(mi)
        dwTotalCommit   =   0   '这是结果
        pAddr   =   &H0   '这个时查询起始地址,设为0,即进程虚拟地址开始处。
        hProcess   =   OpenProcess(PROCESS_VM_READ,   False,   ProcessId)   '首先打开进程供查询信息
        ret   =   VirtualQueryEx(hProcess,   ByVal   pAddr,   mi,   miLen)     '从起始地址开始查询
        Do   While   (ret   =   miLen)
                If   mi.State   =   MEM_COMMIT   Then   '如果State是MEM_COMMIT则表明这块内存被占用,RegionSize是这一块内存的大小,这一块内存的State都一样
                        dwTotalCommit   =   dwTotalCommit   +   mi.RegionSize
                End   If
                pAddr   =   mi.BaseAddress   +   mi.RegionSize   '跳过已经查询过的内存块,到未被查询的内存地址起始处
                ret   =   VirtualQueryEx(hProcess,   ByVal   pAddr,   mi,   miLen)   '再次查询,直到查询失败(所有可查询地址都已经查过了)
        Loop
        GetTotalCommittedMemory   =   dwTotalCommit
End   Function

请教高手这是为什么????为什么在OpenProcess成功后VirtualQueryEx返回的一直是0?

如果可以的话请发一实例到小弟的邮箱,谢谢!!
cs5@hotmail.com


------解决方案--------------------
试试不传值,行不行?