The FindFirstUrlCacheEntryEx proto in my wininet.inc file has 10 dwords and causes assembler error because it should only have 9 parameters. Editing wininet.inc and changing it to 9 dwords causes linker error. Has anybody successfully used this function in MASM and how do I fix it?

best regards,

czDrillard
Posted on 2001-12-11 08:59:05 by czDrillard
The GroupID parameter is a GROUPID type value, and is passed directly (i.e. not by reference with a pointer). The GROUPID type is typedef'ed in wininet.h as LONGLONG, which means it's a 64-bit value. You can use the full 64-bit value as parameter by first giving the lower DWORD as parameter, then the higher DWORD as second parameter.

Btw I was wondering: CreateUrlCacheGroup returns a GROUPID value. As it's a 64-bit value, how is this value returned?
Is EDX:EAX the default for the win32 API?

Thomas
Posted on 2001-12-11 13:55:57 by Thomas
Thanks Thomas but I still don't understand. MS documentation says use '0' for group ID to enumerate all entries. The function syntax 'FindFirst...' is:

HANDLE FindFirstUrlCacheEntryEx(
LPCSTR lpszUrlSearchPattern,
DWORD dwFlags,
DWORD dwFilter,
GROUPID GroupId,
LPINTERNET_CACHE_ENTRY_INFO lpFirstCacheEntryInfo,
LPDWORD lpdwFirstCacheEntryInfoBufferSize,
LPVOID lpReserved,
LPDWORD pcbReserved2,
LPVOID lpReserved3
);

Function takes 9 parameters, why wininet.inc protoype 10 DWORDS?
GROUPID has this characteristics:

GroupId
GROUPID value that indicates the cache group to enumerate. Set the value to 0 to enumerate all entries that are not grouped.

best regards,

czDrillard
Posted on 2001-12-11 22:41:46 by czDrillard
because GROUPID is a 64-bit value, the groupID parameter isn't a DWORD, but a QWORD. However the l2inc util can't detect what parameter types are used but just divides the total parameter size by 4 to get the number of DWORD parameters.. because a QWORD consists of two DWORDS, you'll get one extra..
One thing you could do is change the prototype to have a QWORD parameter, the other thing is splitting the QWORD in two dwords:



invoke FindFirstUrlCacheEntryEx, \
lpszUrlSearchPattern, \
dwFlags,\
dwFilter,\
[b]lower dword of the GroupID QWORD value[/b],\
[b]higher dword of the GroupID QWORD value[/b],
....

When using null for GroupID, of course both lower and higher dwords have to be null.

When using this method your code remains compatible with the default masm32 includes...

Hope this helps,

Thomas
Posted on 2001-12-12 05:45:13 by Thomas
Hi Thomas,

Used your DWORD suggestion and everything works.
Some reason I never picked up information that GroupID was QWORD size paramater.

Btw, how did you get this information? are you the wizard :)

best regards,

czDrillard
Posted on 2001-12-13 01:07:26 by czDrillard
I immediately thought of non-dword parameters as the same happens with ChildWindowFromPoint (Here a POINT structure is given directly instead of by reference, so the second parameter is 2x32-bits here too). I searched msdn for your function and saw that all parameters were dwords or pointers (read: dwords), except for the GroupID parameter. I couldn't find the GROUPID type defenition at msdn, but I found it in the C header files typedef'ed as longlong (64-bit long value).

Thomas
Posted on 2001-12-13 04:40:24 by Thomas