写一个在windows 内核可以用的类似vector的库
时间: 2023-05-11 22:03:46 浏览: 73
好的,我可以回答这个问题。在Windows内核中,可以使用ExAllocatePoolWithTag函数来分配内存,然后使用memcpy函数来复制数据。您可以使用这些函数来实现类似于vector的库。以下是一个简单的示例代码:
```
#include <ntddk.h>
#define MY_VECTOR_TAG 'myvc'
typedef struct _MY_VECTOR {
PVOID* Data;
ULONG Count;
ULONG Capacity;
} MY_VECTOR, *PMY_VECTOR;
NTSTATUS MyVectorCreate(PMY_VECTOR Vector, ULONG InitialCapacity)
{
Vector->Data = ExAllocatePoolWithTag(NonPagedPool, InitialCapacity * sizeof(PVOID), MY_VECTOR_TAG);
if (!Vector->Data) {
return STATUS_INSUFFICIENT_RESOURCES;
}
Vector->Count = 0;
Vector->Capacity = InitialCapacity;
return STATUS_SUCCESS;
}
NTSTATUS MyVectorPushBack(PMY_VECTOR Vector, PVOID Element)
{
if (Vector->Count == Vector->Capacity) {
ULONG NewCapacity = Vector->Capacity * 2;
PVOID* NewData = ExAllocatePoolWithTag(NonPagedPool, NewCapacity * sizeof(PVOID), MY_VECTOR_TAG);
if (!NewData) {
return STATUS_INSUFFICIENT_RESOURCES;
}
RtlCopyMemory(NewData, Vector->Data, Vector->Count * sizeof(PVOID));
ExFreePoolWithTag(Vector->Data, MY_VECTOR_TAG);
Vector->Data = NewData;
Vector->Capacity = NewCapacity;
}
Vector->Data[Vector->Count++] = Element;
return STATUS_SUCCESS;
}
VOID MyVectorDestroy(PMY_VECTOR Vector)
{
ExFreePoolWithTag(Vector->Data, MY_VECTOR_TAG);
Vector->Data = NULL;
Vector->Count = 0;
Vector->Capacity = 0;
}
```
这是一个简单的动态数组实现,可以使用MyVectorCreate函数来创建一个新的vector,使用MyVectorPushBack函数来添加元素,使用MyVectorDestroy函数来销毁vector。
相关推荐
![c](https://img-home.csdnimg.cn/images/20210720083646.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)