Tvůrce webu je i pro tebe! Postav třeba web. Bez grafika. Bez kodéra. Hned.
wz

^ Nahoru - Další >>


>>> stránka zatím rozpracována a bude ještě měněna <<<

USER - Uživatel

Soubory: INCLUDE\KERNEL\USER.INC, KERNEL\USER.ASM.

Obsluha uživatele spočívá v evidenci nastavení a parametrů uživatele.

Datové struktury a makra


; ------------- User

struc		USER

		resb	LIST_size	; 0: list of users
USER_Hash:	resb	HASHE_size	; 8: hash list of users
USER_ProcList:	resb	LIST_size	; 10h: header of user's process list
USER_Flags:	resd	1		; 18h: flags (see below)
USER_ID:	resd	1		; 1Ch: user's ID
USER_National:	resd	1		; 20h: pointer to NATIONAL

endstruc				; size 24h = 36 bytes

; ------------- User flags

USER_ADMIN	EQU	B0		; user has admin rights

ROOTUSER_ID	EQU	0		; ID of root user

Struktura USER slouží k popisu jednoho uživatele. Na začátku struktury je položka seznamu uživatelů (záhlaví seznamu je UserList). USER_Hash je položka hashovaného seznamu uživatelů. Hashovaný seznam uživatelů slouží k rychlému vyhledání uživatele podle jeho identifikačního čísla. USER_ProcList je záhlaví seznamu procesů patřících uživateli. USER_Flags obsahuje příznaky. Příznak USER_ADMIN znamená, že uživatelem je administrátor a proces má tedy administrátorská (tedy neomezená) práva. USER_ID je identifikační číslo uživatele. ROOTUSER_ID je předdefinované číslo uživatele s administrátorskými (tedy neomezenými) právy. USER_National je ukazatel na popisovač národnostních informací NATIONAL.


; ------------- Macro - Initialized user structure
; %1 = link to next user, %2 = link to previous user, %3 = flags,
; %4 = user's ID, %5 = pointer to default nationality descriptor

%macro		USERINI	5

		LINKEDLIST %1,%2	; list of users
		LISTHEAD		; hash list of users
		LISTHEAD		; header of user's process list
		dd	%3		; flags
		dd	%4		; user's ID
		dd	%5		; default nationality descriptor
%endmacro

Makro USERINI slouží k vytvoření inicializované definice uživatele USER. Prvním parametrem makra je ukazatel na následujícího uživatele. Druhým parametrem je ukazatel na předešlého uživatele. Třetím parametrem jsou příznaky, čtvrtý parametr je uživatelské identifikační číslo a pátým parametrem je ukazatel na implicitní popisovač národnostních informací.


; ------------- Hash list of users

USERHASH_BITS	EQU	8		; number of bits of hash key
USERHASH_NUM	EQU	1 << USERHASH_BITS ; number of hash entries
USERHASH_MASK	EQU	USERHASH_NUM-1	; mask of hash key

; ------------- Hash list of users

UserHashList:	resb	HASHH_size*USERHASH_NUM ; hash list of users

K rychlému vyhledání uživatele podle jeho identifikačního čísla slouží hashovaný seznam UserHashList. Vyhledávacím klíčem seznamu je spodních 8 bitů identifikačního čísla uživatele.


; ------------- Macro - get current user (%1 = register)

%macro		CURRENT_USER 1

		CURRENT_PROC %1		; get current process
		mov	%1,[%1+PROC_User] ; get current user
%endmacro

Makro CURRENT_USER vyhledá popisovač uživatele vlastnícího aktuální proces. Parametrem makra je jméno registru, ve kterém bude navrácen ukazatel na popisovač uživatele USER. Při vyhledání popisovače se využívá makro CURRENT_PROC, které navrátí ukazatel na aktuální proces. Ze struktury aktuálního procesu je načten ukazatel na uživatele, který je vlastníkem aktuálního procesu.


^ Nahoru - Další >>