Bitdefender Hypervisor Memory Introspection
queue.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2020 Bitdefender
3  * SPDX-License-Identifier: Apache-2.0
4  */
5 #ifndef _QUEUE_H_
6 #define _QUEUE_H_
7 
8 #include "introtypes.h"
9 
10 typedef struct _QUEUE
11 {
12  union
13  {
14  struct _QUEUE *Next;
15  struct _QUEUE *Head;
16  };
18 
19 
20 __forceinline void
22  _Out_ QUEUE_HEAD *QueueHead
23  )
24 {
25  QueueHead->Next = QueueHead;
26 }
27 
28 
31  _In_ QUEUE_HEAD *QueueHead
32  )
33 {
34  return (BOOLEAN)(QueueHead->Next == QueueHead);
35 }
36 
37 
40  _In_ QUEUE_HEAD *QueueHead
41  )
42 {
43  QUEUE_ENTRY *head = QueueHead->Head;
44 
45  QueueHead->Head = head->Next;
46 
47  return head;
48 }
49 
50 
51 __forceinline void
53  _In_ QUEUE_HEAD *QueueHead,
54  _In_ QUEUE_ENTRY *Element
55  )
56 {
57  QUEUE_ENTRY *oldHead = QueueHead->Head;
58  QueueHead->Head = Element;
59 
60  Element->Next = oldHead;
61 }
62 
63 #endif // _QUEUE_H_
_Bool BOOLEAN
Definition: intro_types.h:58
#define _Out_
Definition: intro_sal.h:22
#define _In_
Definition: intro_sal.h:21
struct _QUEUE QUEUE_ENTRY
void QueueInsert(QUEUE_HEAD *QueueHead, QUEUE_ENTRY *Element)
Definition: queue.h:52
void QueueInitialize(QUEUE_HEAD *QueueHead)
Definition: queue.h:21
struct _QUEUE * PQUEUE_ENTRY
struct _QUEUE QUEUE_HEAD
struct _QUEUE * Next
Definition: queue.h:14
BOOLEAN QueueIsEmpty(QUEUE_HEAD *QueueHead)
Definition: queue.h:30
#define __forceinline
Definition: introtypes.h:61
Definition: queue.h:10
QUEUE_ENTRY * QueueRemove(QUEUE_HEAD *QueueHead)
Definition: queue.h:39
struct _QUEUE * PQUEUE_HEAD
struct _QUEUE * Head
Definition: queue.h:15