⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 symlinks.asm

📁 符号链接名查看器
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;
;  SymLinks - Let you browse symbolic links
;
;  Written by Four-F (four-f@mail.ru)
;
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

.486
.model flat, stdcall
option casemap:none

;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;                                  I N C L U D E   F I L E S                                        
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

include \masm32\include\windows.inc
include \masm32\include\w2k\ntstatus.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
include \masm32\include\comctl32.inc
include \masm32\include\gdi32.inc
include \masm32\include\w2k\ntdll.inc

includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\comctl32.lib
includelib \masm32\lib\gdi32.lib
includelib \masm32\lib\w2k\ntdll.lib

;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

include Macros.mac
include \masm32\Macros\Strings.mac
include ListView.mac
include memory.asm

;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;                                       E Q U A T E S                                               
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

IDD_MAIN_DIALOG		equ 100
IDC_LISTVIEW		equ 101

IDI_MAIN_ICON		equ 200

MAX_TEXT_LENGTH		equ	128

IDM_ABOUT			equ	2000

IDI_UP_ARROW		equ 2001
IDI_DOWN_ARROW		equ 2002

CX_HEADERBITMAP		equ 9
CY_HEADERBITMAP		equ 5

SORT_NOT_YET		equ 0
SORT_ASCENDING		equ 1
SORT_DESCENDING		equ 2

;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;                                  R E A D O N L Y  D A T A                                         
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

.const
g_szListViewClassName		db "SysListView32", 0

szAbout						db "About...", 0
szWrittenBy					db "Symbolic Links Viewer v1.0", 0Ah, 0Dh
							db "Compiled on "
							date
							db 0Ah, 0Dh, 0Ah, 0Dh
							db "Written by Four-F <four-f@mail.ru>", 0

;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;                              U N I N I T I A L I Z E D  D A T A                                   
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

.data?
g_hInstance				HINSTANCE	?
g_hDlg					HWND		?		; global handle of the main dialog
g_hMainIcon				HICON		?
g_hwndListView			HWND		?
g_hwndHeader			HWND		?

g_uPrevClickedColumn	UINT		?
g_uSortOrder			UINT		?

g_hbmpHeaderArrowUp		HBITMAP		?
g_hbmpHeaderArrowDown	HBITMAP		?

;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;                                       C O D E                                                     
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

.code

;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;                                        CompareFunc                                                
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

CompareFunc proc uses edi lParam1:DWORD, lParam2:DWORD, uClickedColumn:UINT

local buffer[256]:CHAR
local buffer1[256]:CHAR
local lvi:LV_ITEM
	
	mov lvi.imask,LVIF_TEXT
	lea eax,buffer
	mov lvi.pszText, eax
	mov lvi.cchTextMax, sizeof buffer

	push uClickedColumn
	pop lvi.iSubItem

	invoke SendMessage, g_hwndListView, LVM_GETITEMTEXT, lParam1, addr lvi
	invoke lstrcpy, addr buffer1, addr buffer
	invoke SendMessage, g_hwndListView, LVM_GETITEMTEXT, lParam2, addr lvi

	.if g_uSortOrder == SORT_ASCENDING
		invoke lstrcmpi, addr buffer1, addr buffer		
	.else
		invoke lstrcmpi, addr buffer, addr buffer1
	.endif

	ret

CompareFunc endp

;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;                                      UpdatelParam                                                 
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

UpdatelParam proc uses edi

LOCAL lvi:LV_ITEM
    
	invoke SendMessage, g_hwndListView, LVM_GETITEMCOUNT, 0, 0
	mov edi, eax
	mov lvi.imask, LVIF_PARAM

	xor eax, eax
	mov lvi.iSubItem, eax
	mov lvi.iItem, eax
	.while edi > 0
		push lvi.iItem
		pop lvi.lParam
		invoke SendMessage, g_hwndListView, LVM_SETITEM, 0, addr lvi
		inc lvi.iItem
		dec edi
	.endw

	ret

UpdatelParam endp

;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;                                    LoadHeaderBitmap                                               
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

LoadHeaderBitmap proc uses esi edi ecx edx ebx

	mov g_hbmpHeaderArrowDown, $invoke(LoadImage, g_hInstance, IDI_DOWN_ARROW, IMAGE_BITMAP, CX_HEADERBITMAP, CY_HEADERBITMAP, LR_LOADMAP3DCOLORS)
	mov g_hbmpHeaderArrowUp, $invoke(LoadImage, g_hInstance, IDI_UP_ARROW, IMAGE_BITMAP, CX_HEADERBITMAP, CY_HEADERBITMAP, LR_LOADMAP3DCOLORS)

    ret

LoadHeaderBitmap endp

;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;                                    DeleteHeaderBitmap                                             
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

DeleteHeaderBitmap proc 

	invoke DeleteObject, g_hbmpHeaderArrowDown
	invoke DeleteObject, g_hbmpHeaderArrowUp

    ret

DeleteHeaderBitmap endp

;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;                                    ImageToHeaderItem                                              
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

ImageToHeaderItem proc hwndHeader:HWND, uColumn:UINT, hbmp:HBITMAP

; hbmp == NULL: Remove bitmap

LOCAL hdi:HD_ITEM

	mov hdi.imask, HDI_FORMAT
	invoke SendMessage, hwndHeader, HDM_GETITEM, uColumn, addr hdi
	.if hbmp != NULL
		mov hdi.imask, HDI_FORMAT + HDI_BITMAP
		or hdi.fmt, HDF_BITMAP + HDF_BITMAP_ON_RIGHT
		m2m hdi.hbm, hbmp
	.else
		mov hdi.imask, HDI_FORMAT
		and hdi.fmt, NOT HDF_BITMAP
	.endif
    invoke SendMessage, hwndHeader, HDM_SETITEM, uColumn, addr hdi

	ret

ImageToHeaderItem endp

;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;                                   InsertListViewColumn                                            
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

InsertListViewColumn proc uses esi edi

local lvc:LV_COLUMN

	lea esi, lvc
	assume esi:PTR LV_COLUMN
	mov edi, g_hwndListView

    mov [esi].imask, LVCF_FMT + LVCF_TEXT + LVCF_WIDTH

    mov [esi].fmt, LVCFMT_LEFT
    mov [esi].pszText, $CTA0("Name")
    mov [esi].lx, 300
	ListView_InsertColumn edi, 0, esi

    mov [esi].pszText, $CTA0("Links To")
	ListView_InsertColumn edi, 1, esi

	assume esi:nothing

    ret
    		
InsertListViewColumn endp

;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;                                       FillListView                                                
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

FillListView proc uses esi edi ebx

local lvi:LV_ITEM 
local buffer[1024]:CHAR
local lvc:LVCOLUMN
;local pMemory:LPVOID

	invoke SendMessage, g_hwndListView, WM_SETREDRAW, FALSE, 0

	ListView_DeleteAllItems g_hwndListView

	xor edi, edi
	mov ebx, 1000h										; start with one page
	.while TRUE

		invoke malloc, ebx
		.break .if eax == 0

		mov edi, eax
		invoke QueryDosDevice, NULL, edi, ebx
		.break .if eax != 0

		invoke GetLastError
		push eax
		invoke free, edi
		xor edi, edi
		pop eax

		.break .if eax != ERROR_INSUFFICIENT_BUFFER	; something strange
		shl ebx, 1									; ask twice more memory
		.break .if ebx > 1000h * 1000				; 1000 pages should be enough anyway

	.endw

	.if edi != NULL

		lea esi, lvi
		assume esi:ptr LV_ITEM
		mov [esi].imask, LVIF_TEXT
		and lvi.iItem, 0

		mov ebx, edi
		.if byte ptr [ebx] != 0
			.while TRUE
				invoke QueryDosDevice, ebx, addr buffer, sizeof buffer
				.if eax != 0

					and lvi.iSubItem, 0
					mov [esi].pszText, ebx
					ListView_InsertItem g_hwndListView, esi
						
					inc lvi.iSubItem
					lea eax, buffer

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -