Difference between revisions of "DosGiveSeg"
m (Ak120 moved page DosGiveSeg (Legacy) to DosGiveSeg) |
m |
||
Line 1: | Line 1: | ||
− | |||
This call allows another process to access shared memory allocated by a DosAllocSeg or DosAllocHuge call. | This call allows another process to access shared memory allocated by a DosAllocSeg or DosAllocHuge call. | ||
==Syntax== | ==Syntax== | ||
− | + | DosGiveSeg (CallerSegSelector, ProcessID, RecipientSegSelector) | |
− | DosGiveSeg | + | |
− | |||
− | |||
==Parameters== | ==Parameters== | ||
− | ; | + | ;CallerSegSelector (SEL) - input : Segment selector of the shared memory segment. |
− | + | ;ProcessID (PID) - input : Process ID of the process to receive access to the shared memory segment. | |
− | ; ProcessID (PID) - input : Process ID of the process to receive access to the shared memory segment. | + | ;RecipientSegSelector (PSEL) - output : Address of the recipient's segment selector. |
− | + | ||
− | ; RecipientSegSelector (PSEL) - output : Address of the recipient's segment selector. | + | |
==Return Code== | ==Return Code== | ||
rc (USHORT) - return | rc (USHORT) - return | ||
− | |||
Return code descriptions are: | Return code descriptions are: | ||
− | |||
* 0 NO_ERROR | * 0 NO_ERROR | ||
* 5 ERROR_ACCESS_DENIED | * 5 ERROR_ACCESS_DENIED | ||
Line 58: | Line 50: | ||
==Related Functions== | ==Related Functions== | ||
* | * | ||
− | |||
[[Category:Dos]] | [[Category:Dos]] |
Revision as of 04:45, 16 February 2017
This call allows another process to access shared memory allocated by a DosAllocSeg or DosAllocHuge call.
Contents
Syntax
DosGiveSeg (CallerSegSelector, ProcessID, RecipientSegSelector)
Parameters
- CallerSegSelector (SEL) - input
- Segment selector of the shared memory segment.
- ProcessID (PID) - input
- Process ID of the process to receive access to the shared memory segment.
- RecipientSegSelector (PSEL) - output
- Address of the recipient's segment selector.
Return Code
rc (USHORT) - return
Return code descriptions are:
- 0 NO_ERROR
- 5 ERROR_ACCESS_DENIED
- 8 ERROR_NOT_ENOUGH_MEMORY
Remarks
DosGiveSeg returns a selector that can be given to another process to access shared memory the giver has allocated by a DosAllocSeg or DosAllocHuge call. The giving process passes the recipient's selector to the intended sharer by some means of interprocess communication. If the recipient has created a queue with DosCreateQueue, the giver can issue DosWriteQueue, specifying the queue name, and pass the selector in this manner.
If the memory being given was allocated by a DosAllocHuge request, the CallerSegSelector must be the base selector returned by DosAllocHuge. When the caller passes the selector returned in RecipientSegSelector to the intended sharer, this selector has addressability only to the first segment in the sharer's address space of the huge allocation. However, the recipient can call DosGetHugeShift and use the shift count returned to calculate the selectors for the remaining segments.
Example Code
C Binding
#define INCL_DOSMEMMGR USHORT rc = DosGiveSeg(CallerSegSelector, ProcessID, RecipientSegSelector); SEL CallerSegSelector; /* Caller's segment selector */ PID ProcessID; /* Process ID of recipient */ PSEL RecipientSegSelector; /* Recipient's segment selector (returned) */ USHORT rc; /* return code */
MASM Binding
EXTRN DosGiveSeg:FAR INCL_DOSMEMMGR EQU 1 PUSH WORD CallerSegSelector ;Caller's segment selector PUSH WORD ProcessID ;Process ID of recipient PUSH@ WORD RecipientSegSelector ;Recipient's segment selector (returned) CALL DosGiveSeg Returns WORD