{$APPTYPE CONSOLE}
{$ifdef FPC}
{$MODESWITCH NESTEDCOMMENTS OFF}
{$endif}
{$MINENUMSIZE 4}
{$TYPEDADDRESS ON}
{$LONGSTRINGS OFF}
program _BitpEnumeration;
type
_1bit = 0 .. $1;
_30bits = 0 .. $3FFFFFFF;
_31bits = 0 .. $7FFFFFFF;
type
{ _THREAD_UMS_INFORMATION_COMMAND }
PTHREAD_UMS_INFORMATION_COMMAND = ^TTHREAD_UMS_INFORMATION_COMMAND;
TTHREAD_UMS_INFORMATION_COMMAND =
(
{ 0 0 } UmsInformationCommandInvalid,
{ 1 1 } UmsInformationCommandAttach,
{ 2 2 } UmsInformationCommandDetach,
{ 3 3 } UmsInformationCommandQuery
);
type
PTHREAD_UMS_INFORMATION = ^TTHREAD_UMS_INFORMATION;
TTHREAD_UMS_INFORMATION = {$ifdef FPC} bitpacked {$endif} record
Command : TTHREAD_UMS_INFORMATION_COMMAND; { 4 }
CompletionList : pointer; { 4 }
UmsContext : pointer; { 4 }
case integer of
1 : (
Flags : DWORD; { 4 }
);
{$ifdef FPC}
2 : (
IsUmsSchedulerThread : _1bit;
IsUmsWorkerThread : _1bit;
SpareBits : _30bits;
);
{$endif}
end;
type
PTHREAD_UMS_INFORMATION2 = ^TTHREAD_UMS_INFORMATION2;
TTHREAD_UMS_INFORMATION2 = record
Command : TTHREAD_UMS_INFORMATION_COMMAND; { 4 }
CompletionList : pointer; { 4 }
UmsContext : pointer; { 4 }
case integer of
1 : (
Flags : DWORD; { 4 }
);
{$ifdef FPC}
2 : (
BitFlags : bitpacked record
IsUmsSchedulerThread : _1bit;
IsUmsWorkerThread : _1bit;
SpareBits : _30bits;
end;
);
{$endif}
end;
begin
writeln;
writeln;
writeln(' sizeof TTHREAD_UMS_INFORMATION : ', sizeof(TTHREAD_UMS_INFORMATION));
writeln(' sizeof TTHREAD_UMS_INFORMATION2 : ', sizeof(TTHREAD_UMS_INFORMATION2));
writeln;
writeln;
writeln('press ENTER/RETURN to end this program');
readln;
end.