The documentation says that Error_Invalid_Size is the error when the dwSize field fo the RasEntry record is incorrect. If the function was able to read that field, then you did not provide a null pointer for the lpRasEntry parameter as you claim you did. The Microsoft documentation says "null," and in Delphi, the reserved word nil designates the null pointer. Do not get confused with the function named Null; it designates the special Variant value.
Based on the documentation, you should have code like this:
var
RasEntry: PRasEntry;
RasBufferSize: DWord;
Res: DWord;
begin
RasBufferSize := 0;
Res := RasGetEntryProperties(nil, '', nil, @RasBufferSize, nil, nil);
if Res <> Error_Success then
RaiseLastOSError(Res);
RasEntry := AllocMem(RasBufferSize);
try
RasEntry.dwSize := SizeOf(TRasEntry);
Assert(RasEntry.dwSize <= RasBufferSize);
Res := RasGetEntryProperties(nil, '', RasEntry, @RasBufferSize, nil, nil);
finally
FreeMem(RasEntry);
end;
end;
You ask the function how large a buffer it requires (in RasBufferSize), and then you tell it how large a buffer you're expecting it to fill (in RasEntry.dwSize). The dwSize field tells the function what version of the structure you're expecting to receive.