New Lexer:
File_Hash(sFile, SID = "CRC32")
{
	nSize:=	File_WriteMemory(sFile, sBuffer)
	Return	Crypt_Hash(&sBuffer, nSize, SID)
}

File_AES(sFileFr, sFileTo, sPassword, SID = 256, bEncrypt = True)
{
	If	!(1 + hFileFr := File_CreateFile(sFileFr, 3, 0x80000000, 1))
	Return	"File not found!"
	nSize := File_GetFileSize(hFileFr),	VarSetCapacity(sBuffer, nSize + (bEncrypt ? 16 : 0))
	File_ReadFile(hFileFr,&sBuffer,nSize),	File_CloseHandle(hFileFr)
	If	!(1 + hFileTo := File_CreateFile(sFileTo, 2, 0x40000000, 1))
	Return	"File not created/opened!"
	nSize := Crypt_AES(&sBuffer, nSize, sPassword, SID, bEncrypt)
	File_WriteFile(hFileTo,&sBuffer,nSize),	File_CloseHandle(hFileTo)
	Return	nSize
}

File_ReadMemory(sFile, pBuffer, nSize = 512, bAppend = False)
{
	If	!(1 + hFile := File_CreateFile(sFile, 4, 0x40000000, 1))
	Return	"File not created/opened!"
	File_SetFilePointer(hFile, bAppend ? 2 : 0)
	nSize := File_WriteFile(hFile, pBuffer, nSize)
	File_SetEndOfFile(hFile)
	File_CloseHandle(hFile)
	Return	nSize
}

File_WriteMemory(sFile, ByRef sBuffer, nSize = 0)
{
	If	!(1 + hFile := File_CreateFile(sFile, 3, 0x80000000, 1))
	Return	"File not found!"
	VarSetCapacity(sBuffer, nSize += nSize ? 0 : File_GetFileSize(hFile))
	nSize := File_ReadFile(hFile, &sBuffer, nSize)
	NumPut(0, sBuffer, nSize, "char")
	VarSetCapacity(sBuffer, -1)
	File_CloseHandle(hFile)
	Return	nSize
}

File_CreateFile(sFile, nCreate = 3, nAccess = 0x1F01FF, nShare = 3, bFolder = False)
{
/*
	CREATE_NEW    = 1
	CREATE_ALWAYS = 2
	OPEN_EXISTING = 3
	OPEN_ALWAYS   = 4

	GENERIC_READ    = 0x80000000
	GENERIC_WRITE   = 0x40000000
	GENERIC_EXECUTE = 0x20000000
	GENERIC_ALL     = 0x10000000 

	FILE_SHARE_READ   = 1
	FILE_SHARE_WRITE  = 2
	FILE_SHARE_DELETE = 4
*/
	Return	DllCall("CreateFile", "Uint", &sFile, "Uint", nAccess, "Uint", nShare, "Uint", 0, "Uint", nCreate, "Uint", bFolder ? 0x02000000 : 0, "Uint", 0)
}

File_DeleteFile(sFile)
{
	Return	DllCall("DeleteFile", "Uint", &sFile)
}

File_ReadFile(hFile, pBuffer, nSize = 1024)
{
	DllCall("ReadFile", "Uint", hFile, "Uint", pBuffer, "Uint", nSize, "UintP", nSize, "Uint", 0)
	Return	nSize
}

File_WriteFile(hFile, pBuffer, nSize = 1024)
{
	DllCall("WriteFile", "Uint", hFile, "Uint", pBuffer, "Uint", nSize, "UintP", nSize, "Uint", 0)
	Return	nSize
}

File_GetFileSize(hFile)
{
	DllCall("GetFileSizeEx", "Uint", hFile, "int64P", nSize)
	Return	nSize
}

File_SetEndOfFile(hFile)
{
	Return	DllCall("SetEndOfFile", "Uint", hFile)
}

File_SetFilePointer(hFile, nPos = 0, nMove = 0)
{
/*
	FILE_BEGIN   = 0
	FILE_CURRENT = 1
	FILE_END     = 2
*/
	Return	DllCall("SetFilePointerEx", "Uint", hFile, "int64", nMove, "Uint", 0, "Uint", nPos)
}

File_CloseHandle(Handle)
{
	Return	DllCall("CloseHandle", "Uint", Handle)
}


File_InternetOpen(sAgent = "AutoHotkey", nType = 4)
{
	If Not	DllCall("GetModuleHandle", "str", "wininet")
		DllCall("LoadLibrary"    , "str", "wininet")
	Return	DllCall("wininet\InternetOpenA", "str", sAgent, "Uint", nType, "Uint", 0, "Uint", 0, "Uint", 0)
}

File_InternetOpenUrl(hInet, sUrl, nFlags = 0, pHeaders = 0)
{
	Return	DllCall("wininet\InternetOpenUrlA", "Uint", hInet, "Uint", &sUrl, "Uint", pHeaders, "Uint", -1, "Uint", nFlags | 0x80000000, "Uint", 0)   ; INTERNET_FLAG_RELOAD = 0x80000000
}

File_InternetReadFile(hFile, pBuffer, nSize = 1024)
{
	DllCall("wininet\InternetReadFile", "Uint", hFile, "Uint", pBuffer, "Uint", nSize, "UintP", nSize)
	Return	nSize
}

File_InternetWriteFile(hFile, pBuffer, nSize = 1024)
{
	DllCall("wininet\InternetWriteFile", "Uint", hFile, "Uint", pBuffer, "Uint", nSize, "UintP", nSize)
	Return	nSize
}

File_InternetSetFilePointer(hFile, nPos = 0, nMove = 0)
{
	Return	DllCall("wininet\InternetSetFilePointer", "Uint", hFile, "Uint", nMove, "Uint", 0, "Uint", nPos, "Uint", 0)
}

File_InternetCloseHandle(Handle)
{
	Return	DllCall("wininet\InternetCloseHandle", "Uint", Handle)
}