windows _LIST_ENTRY
时间: 2023-07-08 17:51:13 浏览: 198
_LIST_ENTRY 是 Windows 中的一个双向链表结构体,用于实现双向链表数据结构。它的定义如下:
```
typedef struct _LIST_ENTRY {
struct _LIST_ENTRY *Flink;
struct _LIST_ENTRY *Blink;
} LIST_ENTRY, *PLIST_ENTRY, *RESTRICTED_POINTER PRLIST_ENTRY;
```
其中,Flink 和 Blink 分别指向链表中的下一个和上一个元素。
在 Windows 中,_LIST_ENTRY 主要用于实现各种内核数据结构,例如进程链表、线程链表、驱动程序链表等。例如,可以使用 _LIST_ENTRY 定义一个进程链表:
```
typedef struct _PROCESS_ENTRY {
LIST_ENTRY ListEntry;
DWORD ProcessId;
HANDLE ProcessHandle;
// 其他成员变量
} PROCESS_ENTRY, *PPROCESS_ENTRY;
```
其中,ListEntry 成员变量用于实现进程链表,ProcessId 和 ProcessHandle 等成员变量用于存储进程相关信息。
在使用 _LIST_ENTRY 实现链表时,需要注意以下几点:
1. 需要使用 InitializeListHead 函数初始化链表头。
2. 需要使用 InsertHeadList、InsertTailList、RemoveHeadList、RemoveTailList 等函数操作链表元素。
3. 需要使用 CONTAINING_RECORD 宏将链表元素转换为结构体指针。
总之,_LIST_ENTRY 是 Windows 中实现双向链表的常用数据结构,它可以用于实现各种内核数据结构,例如进程链表、线程链表、驱动程序链表等。
阅读全文
相关推荐
















import re,tkinter,requests,threading,tqdm as tt root = tkinter.Tk() root.title('在线视频解析') root.geometry('500x590+550+350') headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0'} ac = tkinter.Listbox(root, width=50, height=20, font=('黑体', 12)) ac.grid(row=2, columnspan=10, sticky="n" + "s" + "w" + "e") def sousuo(): i = b1.get() ac.delete(0, 'end') def extract_music_info(content): p = '|' content = re.sub(p, '', content, flags=re.S) pattern = re.compile('subject.*?href="(.*?)">(.*?)
', flags=re.S) return pattern.findall(content) def search_music(): url = 'https://www.hifini.com/search-' + i + '-1.htm' response = requests.get(url=url, headers=headers) return response.text def update_listbox(music_list): for music in music_list: pppp = music[1] + ":" + music[0] ac.insert('end', pppp) content = search_music() music_list = extract_music_info(content) update_listbox(music_list) def xiazzi(): def download_music(): ppp = ac.get(ac.curselection()) pp = re.search('thread.*?htm', ppp) v = pp.group() url1 = 'https://www.hifini.com/' + v response = requests.get(url=url1, headers=headers) ppp = response.text l2 = re.search('<script>.*?title:..(.*?).,.*?author:.(.*?).,.*?url:..(.*?).,', ppp, flags=re.S) p = 'https://www.hifini.com/' + l2.group(3) response = requests.get(url=p, headers=headers, stream=True) # 设置 stream=True 以启用流式下载 total_size = int(response.headers.get('Content-Length')) music_name = '{}-{}.mp3'.format(l2.group(2), l2.group(1)) progress_bar = tt.tqdm(total=total_size, unit='B', unit_scale=True) # 创建进度条 with open(music_name, 'wb') as f: for data in response.iter_content(chunk_size=1024): progress_bar.update(len(data)) # 更新进度条 f.write(data) progress_bar.close() # 关闭进度条 print(music_name) threading.Thread(target=download_music).start() a1 = tkinter.Label(root, text='音乐下载器', anchor="center", font=('黑体', 24)) a1.grid(row=0, columnspan=10, sticky="n" + "s" + "w" + "e") b1 = tkinter.Entry(root, width=35, font=('黑体', 16), ) b1.grid(row=1, column=3, padx=15) search_button = tkinter.Button(root, text='搜索', command=sousuo) search_button.grid(row=1, column=4) download_button = tkinter.Button(root, text='下载', command=xiazzi) download_button.grid(row=3, column=4) root.mainloop() 将download_button带有下载行为的按钮添加进列表,

