From a550d468a6ca577d9e9c57a0eafcf2fc9fbb8c97 Mon Sep 17 00:00:00 2001 From: Michael Kubacki Date: Sun, 5 Dec 2021 14:53:57 -0800 Subject: EmulatorPkg: Apply uncrustify changes REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3737 Apply uncrustify changes to .c/.h files in the EmulatorPkg package Cc: Andrew Fish Cc: Leif Lindholm Cc: Michael D Kinney Signed-off-by: Michael Kubacki Reviewed-by: Ray Ni --- EmulatorPkg/Win/Host/WinBlockIo.c | 224 +++--- EmulatorPkg/Win/Host/WinFileSystem.c | 983 +++++++++++++------------- EmulatorPkg/Win/Host/WinGop.h | 121 ++-- EmulatorPkg/Win/Host/WinGopInput.c | 132 ++-- EmulatorPkg/Win/Host/WinGopScreen.c | 705 ++++++++++-------- EmulatorPkg/Win/Host/WinHost.c | 347 ++++----- EmulatorPkg/Win/Host/WinHost.h | 64 +- EmulatorPkg/Win/Host/WinInclude.h | 13 +- EmulatorPkg/Win/Host/WinMemoryAllocationLib.c | 15 +- EmulatorPkg/Win/Host/WinPacketFilter.c | 349 +++++---- EmulatorPkg/Win/Host/WinThunk.c | 245 +++---- 11 files changed, 1631 insertions(+), 1567 deletions(-) (limited to 'EmulatorPkg/Win') diff --git a/EmulatorPkg/Win/Host/WinBlockIo.c b/EmulatorPkg/Win/Host/WinBlockIo.c index f602a6a01d..c7cfbee2e0 100644 --- a/EmulatorPkg/Win/Host/WinBlockIo.c +++ b/EmulatorPkg/Win/Host/WinBlockIo.c @@ -7,63 +7,60 @@ SPDX-License-Identifier: BSD-2-Clause-Patent #include "WinHost.h" -#define WIN_NT_BLOCK_IO_PRIVATE_SIGNATURE SIGNATURE_32 ('N', 'T', 'b', 'k') +#define WIN_NT_BLOCK_IO_PRIVATE_SIGNATURE SIGNATURE_32 ('N', 'T', 'b', 'k') typedef struct { - UINTN Signature; + UINTN Signature; - EMU_IO_THUNK_PROTOCOL *Thunk; + EMU_IO_THUNK_PROTOCOL *Thunk; - CHAR16 *FileName; - BOOLEAN Removable; - BOOLEAN Readonly; + CHAR16 *FileName; + BOOLEAN Removable; + BOOLEAN Readonly; - HANDLE NtHandle; - UINT32 BlockSize; + HANDLE NtHandle; + UINT32 BlockSize; - EFI_BLOCK_IO_MEDIA *Media; - EMU_BLOCK_IO_PROTOCOL EmuBlockIo; + EFI_BLOCK_IO_MEDIA *Media; + EMU_BLOCK_IO_PROTOCOL EmuBlockIo; } WIN_NT_BLOCK_IO_PRIVATE; #define WIN_NT_BLOCK_IO_PRIVATE_DATA_FROM_THIS(a) \ CR(a, WIN_NT_BLOCK_IO_PRIVATE, EmuBlockIo, WIN_NT_BLOCK_IO_PRIVATE_SIGNATURE) - EFI_STATUS WinNtBlockIoReset ( - IN EMU_BLOCK_IO_PROTOCOL *This, - IN BOOLEAN ExtendedVerification + IN EMU_BLOCK_IO_PROTOCOL *This, + IN BOOLEAN ExtendedVerification ); - - - EFI_STATUS SetFilePointer64 ( - IN WIN_NT_BLOCK_IO_PRIVATE *Private, - IN INT64 DistanceToMove, - OUT UINT64 *NewFilePointer, - IN DWORD MoveMethod -) + IN WIN_NT_BLOCK_IO_PRIVATE *Private, + IN INT64 DistanceToMove, + OUT UINT64 *NewFilePointer, + IN DWORD MoveMethod + ) + /*++ This function extends the capability of SetFilePointer to accept 64 bit parameters --*/ { - EFI_STATUS Status; - LARGE_INTEGER LargeInt; + EFI_STATUS Status; + LARGE_INTEGER LargeInt; LargeInt.QuadPart = DistanceToMove; - Status = EFI_SUCCESS; + Status = EFI_SUCCESS; LargeInt.LowPart = SetFilePointer ( - Private->NtHandle, - LargeInt.LowPart, - &LargeInt.HighPart, - MoveMethod - ); + Private->NtHandle, + LargeInt.LowPart, + &LargeInt.HighPart, + MoveMethod + ); - if (LargeInt.LowPart == -1 && GetLastError () != NO_ERROR) { + if ((LargeInt.LowPart == -1) && (GetLastError () != NO_ERROR)) { Status = EFI_INVALID_PARAMETER; } @@ -74,16 +71,14 @@ This function extends the capability of SetFilePointer to accept 64 bit paramete return Status; } - - EFI_STATUS WinNtBlockIoOpenDevice ( - IN WIN_NT_BLOCK_IO_PRIVATE *Private, - IN EFI_BLOCK_IO_MEDIA *Media + IN WIN_NT_BLOCK_IO_PRIVATE *Private, + IN EFI_BLOCK_IO_MEDIA *Media ) { - EFI_STATUS Status; - UINT64 FileSize; + EFI_STATUS Status; + UINT64 FileSize; // // If the device is already opened, close it @@ -96,19 +91,19 @@ WinNtBlockIoOpenDevice ( // Open the device // Private->NtHandle = CreateFile ( - Private->FileName, - GENERIC_READ | (Private->Readonly ? 0 : GENERIC_WRITE), - FILE_SHARE_READ | FILE_SHARE_WRITE, - NULL, - OPEN_ALWAYS, // Create if it doesn't exist - 0, - NULL - ); + Private->FileName, + GENERIC_READ | (Private->Readonly ? 0 : GENERIC_WRITE), + FILE_SHARE_READ | FILE_SHARE_WRITE, + NULL, + OPEN_ALWAYS, // Create if it doesn't exist + 0, + NULL + ); if (Private->NtHandle == INVALID_HANDLE_VALUE) { DEBUG ((DEBUG_INFO, "OpenBlock: Could not open %S, %x\n", Private->FileName, GetLastError ())); Media->MediaPresent = FALSE; - Status = EFI_NO_MEDIA; + Status = EFI_NO_MEDIA; goto Done; } @@ -138,15 +133,14 @@ Done: return Status; } - EFI_STATUS EFIAPI WinNtBlockIoCreateMapping ( - IN EMU_BLOCK_IO_PROTOCOL *This, - IN EFI_BLOCK_IO_MEDIA *Media + IN EMU_BLOCK_IO_PROTOCOL *This, + IN EFI_BLOCK_IO_MEDIA *Media ) { - WIN_NT_BLOCK_IO_PRIVATE *Private; + WIN_NT_BLOCK_IO_PRIVATE *Private; Private = WIN_NT_BLOCK_IO_PRIVATE_DATA_FROM_THIS (This); @@ -164,7 +158,6 @@ WinNtBlockIoCreateMapping ( Media->LowestAlignedLba = 0; Media->LogicalBlocksPerPhysicalBlock = 0; - // EFI_BLOCK_IO_PROTOCOL_REVISION3 Media->OptimalTransferLengthGranularity = 0; @@ -175,12 +168,11 @@ WinNtBlockIoCreateMapping ( return WinNtBlockIoOpenDevice (Private, Media); } - - EFI_STATUS WinNtBlockIoError ( - IN WIN_NT_BLOCK_IO_PRIVATE *Private -) + IN WIN_NT_BLOCK_IO_PRIVATE *Private + ) + /*++ Routine Description: @@ -197,49 +189,47 @@ Returns: --*/ { - EFI_BLOCK_IO_MEDIA *Media; - EFI_STATUS Status; + EFI_BLOCK_IO_MEDIA *Media; + EFI_STATUS Status; Media = Private->Media; switch (GetLastError ()) { - - case ERROR_NOT_READY: - Media->ReadOnly = FALSE; - Media->MediaPresent = FALSE; - Status = EFI_NO_MEDIA; - break; - - case ERROR_WRONG_DISK: - Media->ReadOnly = FALSE; - Media->MediaPresent = TRUE; - Media->MediaId++; - Status = EFI_MEDIA_CHANGED; - break; - - case ERROR_WRITE_PROTECT: - Media->ReadOnly = TRUE; - Status = EFI_WRITE_PROTECTED; - break; - - default: - Status = EFI_DEVICE_ERROR; - break; + case ERROR_NOT_READY: + Media->ReadOnly = FALSE; + Media->MediaPresent = FALSE; + Status = EFI_NO_MEDIA; + break; + + case ERROR_WRONG_DISK: + Media->ReadOnly = FALSE; + Media->MediaPresent = TRUE; + Media->MediaId++; + Status = EFI_MEDIA_CHANGED; + break; + + case ERROR_WRITE_PROTECT: + Media->ReadOnly = TRUE; + Status = EFI_WRITE_PROTECTED; + break; + + default: + Status = EFI_DEVICE_ERROR; + break; } - if (Status == EFI_NO_MEDIA || Status == EFI_MEDIA_CHANGED) { + if ((Status == EFI_NO_MEDIA) || (Status == EFI_MEDIA_CHANGED)) { WinNtBlockIoReset (&Private->EmuBlockIo, FALSE); } return Status; } - EFI_STATUS WinNtSignalToken ( - IN OUT EFI_BLOCK_IO2_TOKEN *Token, - IN EFI_STATUS Status -) + IN OUT EFI_BLOCK_IO2_TOKEN *Token, + IN EFI_STATUS Status + ) { if (Token != NULL) { if (Token->Event != NULL) { @@ -248,6 +238,7 @@ WinNtSignalToken ( return EFI_SUCCESS; } } + return Status; } @@ -291,15 +282,15 @@ WinNtBlockIoReadBlocks ( IN EFI_LBA Lba, IN OUT EFI_BLOCK_IO2_TOKEN *Token, IN UINTN BufferSize, - OUT VOID *Buffer + OUT VOID *Buffer ) { - WIN_NT_BLOCK_IO_PRIVATE *Private; - BOOL Flag; - EFI_STATUS Status; - DWORD BytesRead; - UINT64 DistanceToMove; - UINT64 DistanceMoved; + WIN_NT_BLOCK_IO_PRIVATE *Private; + BOOL Flag; + EFI_STATUS Status; + DWORD BytesRead; + UINT64 DistanceToMove; + UINT64 DistanceMoved; Private = WIN_NT_BLOCK_IO_PRIVATE_DATA_FROM_THIS (This); @@ -307,7 +298,7 @@ WinNtBlockIoReadBlocks ( // Seek to proper position // DistanceToMove = MultU64x32 (Lba, (UINT32)Private->BlockSize); - Status = SetFilePointer64 (Private, DistanceToMove, &DistanceMoved, FILE_BEGIN); + Status = SetFilePointer64 (Private, DistanceToMove, &DistanceMoved, FILE_BEGIN); if (EFI_ERROR (Status) || (DistanceToMove != DistanceMoved)) { DEBUG ((DEBUG_INIT, "ReadBlocks: SetFilePointer failed\n")); @@ -323,7 +314,6 @@ WinNtBlockIoReadBlocks ( return WinNtSignalToken (Token, EFI_SUCCESS); } - /** Write BufferSize bytes from Lba into Buffer. @@ -365,12 +355,12 @@ WinNtBlockIoWriteBlocks ( IN VOID *Buffer ) { - WIN_NT_BLOCK_IO_PRIVATE *Private; - UINTN BytesWritten; - BOOL Success; - EFI_STATUS Status; - UINT64 DistanceToMove; - UINT64 DistanceMoved; + WIN_NT_BLOCK_IO_PRIVATE *Private; + UINTN BytesWritten; + BOOL Success; + EFI_STATUS Status; + UINT64 DistanceToMove; + UINT64 DistanceMoved; Private = WIN_NT_BLOCK_IO_PRIVATE_DATA_FROM_THIS (This); @@ -378,7 +368,7 @@ WinNtBlockIoWriteBlocks ( // Seek to proper position // DistanceToMove = MultU64x32 (Lba, (UINT32)Private->BlockSize); - Status = SetFilePointer64 (Private, DistanceToMove, &DistanceMoved, FILE_BEGIN); + Status = SetFilePointer64 (Private, DistanceToMove, &DistanceMoved, FILE_BEGIN); if (EFI_ERROR (Status) || (DistanceToMove != DistanceMoved)) { DEBUG ((DEBUG_INIT, "WriteBlocks: SetFilePointer failed\n")); @@ -422,14 +412,13 @@ WinNtBlockIoWriteBlocks ( **/ EFI_STATUS WinNtBlockIoFlushBlocks ( - IN EMU_BLOCK_IO_PROTOCOL *This, - IN OUT EFI_BLOCK_IO2_TOKEN *Token + IN EMU_BLOCK_IO_PROTOCOL *This, + IN OUT EFI_BLOCK_IO2_TOKEN *Token ) { return WinNtSignalToken (Token, EFI_SUCCESS); } - /** Reset the block device hardware. @@ -445,11 +434,11 @@ WinNtBlockIoFlushBlocks ( **/ EFI_STATUS WinNtBlockIoReset ( - IN EMU_BLOCK_IO_PROTOCOL *This, - IN BOOLEAN ExtendedVerification + IN EMU_BLOCK_IO_PROTOCOL *This, + IN BOOLEAN ExtendedVerification ) { - WIN_NT_BLOCK_IO_PRIVATE *Private; + WIN_NT_BLOCK_IO_PRIVATE *Private; Private = WIN_NT_BLOCK_IO_PRIVATE_DATA_FROM_THIS (This); @@ -461,7 +450,7 @@ WinNtBlockIoReset ( return EFI_SUCCESS; } -EMU_BLOCK_IO_PROTOCOL gEmuBlockIoProtocol = { +EMU_BLOCK_IO_PROTOCOL gEmuBlockIoProtocol = { WinNtBlockIoReset, WinNtBlockIoReadBlocks, WinNtBlockIoWriteBlocks, @@ -472,7 +461,7 @@ EMU_BLOCK_IO_PROTOCOL gEmuBlockIoProtocol = { EFI_STATUS EFIAPI WinNtBlockIoThunkOpen ( - IN EMU_IO_THUNK_PROTOCOL *This + IN EMU_IO_THUNK_PROTOCOL *This ) { WIN_NT_BLOCK_IO_PRIVATE *Private; @@ -487,12 +476,13 @@ WinNtBlockIoThunkOpen ( Private->Thunk = This; CopyMem (&Private->EmuBlockIo, &gEmuBlockIoProtocol, sizeof (gEmuBlockIoProtocol)); Private->BlockSize = 512; - Private->NtHandle = INVALID_HANDLE_VALUE; + Private->NtHandle = INVALID_HANDLE_VALUE; Private->FileName = AllocateCopyPool (StrSize (This->ConfigString), This->ConfigString); if (Private->FileName == NULL) { return EFI_OUT_OF_RESOURCES; } + // // Parse ConfigString // := ':' [RF][OW] ':' @@ -503,12 +493,14 @@ WinNtBlockIoThunkOpen ( Private->Readonly = FALSE; } else { for (*Str++ = L'\0'; *Str != L'\0'; Str++) { - if (*Str == 'R' || *Str == 'F') { - Private->Removable = (BOOLEAN) (*Str == L'R'); + if ((*Str == 'R') || (*Str == 'F')) { + Private->Removable = (BOOLEAN)(*Str == L'R'); } - if (*Str == 'O' || *Str == 'W') { - Private->Readonly = (BOOLEAN) (*Str == L'O'); + + if ((*Str == 'O') || (*Str == 'W')) { + Private->Readonly = (BOOLEAN)(*Str == L'O'); } + if (*Str == ':') { Private->BlockSize = wcstol (++Str, NULL, 0); break; @@ -521,11 +513,10 @@ WinNtBlockIoThunkOpen ( return EFI_SUCCESS; } - EFI_STATUS EFIAPI WinNtBlockIoThunkClose ( - IN EMU_IO_THUNK_PROTOCOL *This + IN EMU_IO_THUNK_PROTOCOL *This ) { WIN_NT_BLOCK_IO_PRIVATE *Private; @@ -536,15 +527,14 @@ WinNtBlockIoThunkClose ( if (Private->FileName != NULL) { FreePool (Private->FileName); } + FreePool (Private); } return EFI_SUCCESS; } - - -EMU_IO_THUNK_PROTOCOL mWinNtBlockIoThunkIo = { +EMU_IO_THUNK_PROTOCOL mWinNtBlockIoThunkIo = { &gEmuBlockIoProtocolGuid, NULL, NULL, diff --git a/EmulatorPkg/Win/Host/WinFileSystem.c b/EmulatorPkg/Win/Host/WinFileSystem.c index f6b06b1c92..5ca404020c 100644 --- a/EmulatorPkg/Win/Host/WinFileSystem.c +++ b/EmulatorPkg/Win/Host/WinFileSystem.c @@ -9,15 +9,14 @@ SPDX-License-Identifier: BSD-2-Clause-Patent #include "WinHost.h" - -#define WIN_NT_SIMPLE_FILE_SYSTEM_PRIVATE_SIGNATURE SIGNATURE_32 ('N', 'T', 'f', 's') +#define WIN_NT_SIMPLE_FILE_SYSTEM_PRIVATE_SIGNATURE SIGNATURE_32 ('N', 'T', 'f', 's') typedef struct { - UINTN Signature; - EMU_IO_THUNK_PROTOCOL *Thunk; - EFI_SIMPLE_FILE_SYSTEM_PROTOCOL SimpleFileSystem; - CHAR16 *FilePath; - CHAR16 *VolumeLabel; + UINTN Signature; + EMU_IO_THUNK_PROTOCOL *Thunk; + EFI_SIMPLE_FILE_SYSTEM_PROTOCOL SimpleFileSystem; + CHAR16 *FilePath; + CHAR16 *VolumeLabel; } WIN_NT_SIMPLE_FILE_SYSTEM_PRIVATE; #define WIN_NT_SIMPLE_FILE_SYSTEM_PRIVATE_DATA_FROM_THIS(a) \ @@ -27,23 +26,22 @@ typedef struct { WIN_NT_SIMPLE_FILE_SYSTEM_PRIVATE_SIGNATURE \ ) - -#define WIN_NT_EFI_FILE_PRIVATE_SIGNATURE SIGNATURE_32 ('l', 'o', 'f', 's') +#define WIN_NT_EFI_FILE_PRIVATE_SIGNATURE SIGNATURE_32 ('l', 'o', 'f', 's') typedef struct { - UINTN Signature; - EMU_IO_THUNK_PROTOCOL *Thunk; - EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *SimpleFileSystem; - EFI_FILE_PROTOCOL EfiFile; - HANDLE LHandle; - HANDLE DirHandle; - BOOLEAN IsRootDirectory; - BOOLEAN IsDirectoryPath; - BOOLEAN IsOpenedByRead; - CHAR16 *FilePath; - WCHAR *FileName; - BOOLEAN IsValidFindBuf; - WIN32_FIND_DATA FindBuf; + UINTN Signature; + EMU_IO_THUNK_PROTOCOL *Thunk; + EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *SimpleFileSystem; + EFI_FILE_PROTOCOL EfiFile; + HANDLE LHandle; + HANDLE DirHandle; + BOOLEAN IsRootDirectory; + BOOLEAN IsDirectoryPath; + BOOLEAN IsOpenedByRead; + CHAR16 *FilePath; + WCHAR *FileName; + BOOLEAN IsValidFindBuf; + WIN32_FIND_DATA FindBuf; } WIN_NT_EFI_FILE_PRIVATE; #define WIN_NT_EFI_FILE_PRIVATE_DATA_FROM_THIS(a) \ @@ -53,32 +51,31 @@ typedef struct { WIN_NT_EFI_FILE_PRIVATE_SIGNATURE \ ) -extern EFI_FILE_PROTOCOL gWinNtFileProtocol; -extern EFI_SIMPLE_FILE_SYSTEM_PROTOCOL gWinNtFileSystemProtocol; +extern EFI_FILE_PROTOCOL gWinNtFileProtocol; +extern EFI_SIMPLE_FILE_SYSTEM_PROTOCOL gWinNtFileSystemProtocol; EFI_STATUS WinNtFileGetInfo ( - IN EFI_FILE_PROTOCOL *This, - IN EFI_GUID *InformationType, - IN OUT UINTN *BufferSize, - OUT VOID *Buffer + IN EFI_FILE_PROTOCOL *This, + IN EFI_GUID *InformationType, + IN OUT UINTN *BufferSize, + OUT VOID *Buffer ); EFI_STATUS WinNtFileSetInfo ( - IN EFI_FILE_PROTOCOL *This, - IN EFI_GUID *InformationType, - IN UINTN BufferSize, - IN VOID *Buffer + IN EFI_FILE_PROTOCOL *This, + IN EFI_GUID *InformationType, + IN UINTN BufferSize, + IN VOID *Buffer ); - - CHAR16 * EfiStrChr ( - IN CHAR16 *Str, - IN CHAR16 Chr -) + IN CHAR16 *Str, + IN CHAR16 Chr + ) + /*++ Routine Description: @@ -109,24 +106,22 @@ Returns: return (*Str == Chr) ? Str : NULL; } - - BOOLEAN IsZero ( IN VOID *Buffer, IN UINTN Length ) { - if (Buffer == NULL || Length == 0) { + if ((Buffer == NULL) || (Length == 0)) { return FALSE; } - if (*(UINT8 *) Buffer != 0) { + if (*(UINT8 *)Buffer != 0) { return FALSE; } if (Length > 1) { - if (!CompareMem (Buffer, (UINT8 *) Buffer + 1, Length - 1)) { + if (!CompareMem (Buffer, (UINT8 *)Buffer + 1, Length - 1)) { return FALSE; } } @@ -147,13 +142,14 @@ CutPrefix ( } if (Count != 0) { - for (Pointer = Str; *(Pointer + Count); Pointer++) { - *Pointer = *(Pointer + Count); - } + for (Pointer = Str; *(Pointer + Count); Pointer++) { + *Pointer = *(Pointer + Count); + } - *Pointer = *(Pointer + Count); + *Pointer = *(Pointer + Count); } } + /** Open the root directory on a volume. @@ -171,17 +167,17 @@ CutPrefix ( **/ EFI_STATUS WinNtOpenVolume ( - IN EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *This, - OUT EFI_FILE_PROTOCOL **Root + IN EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *This, + OUT EFI_FILE_PROTOCOL **Root ) { - EFI_STATUS Status; - WIN_NT_SIMPLE_FILE_SYSTEM_PRIVATE *Private; - WIN_NT_EFI_FILE_PRIVATE *PrivateFile; - CHAR16 *TempFileName; - UINTN Size; + EFI_STATUS Status; + WIN_NT_SIMPLE_FILE_SYSTEM_PRIVATE *Private; + WIN_NT_EFI_FILE_PRIVATE *PrivateFile; + CHAR16 *TempFileName; + UINTN Size; - if (This == NULL || Root == NULL) { + if ((This == NULL) || (Root == NULL)) { return EFI_INVALID_PARAMETER; } @@ -205,20 +201,22 @@ WinNtOpenVolume ( goto Done; } - StrCpyS (PrivateFile->FilePath, + StrCpyS ( + PrivateFile->FilePath, StrSize (Private->FilePath) / sizeof (CHAR16), Private->FilePath ); - StrCpyS (PrivateFile->FileName, + StrCpyS ( + PrivateFile->FileName, StrSize (Private->FilePath) / sizeof (CHAR16), PrivateFile->FilePath ); - PrivateFile->Signature = WIN_NT_EFI_FILE_PRIVATE_SIGNATURE; - PrivateFile->Thunk = Private->Thunk; + PrivateFile->Signature = WIN_NT_EFI_FILE_PRIVATE_SIGNATURE; + PrivateFile->Thunk = Private->Thunk; PrivateFile->SimpleFileSystem = This; - PrivateFile->IsRootDirectory = TRUE; - PrivateFile->IsDirectoryPath = TRUE; - PrivateFile->IsOpenedByRead = TRUE; + PrivateFile->IsRootDirectory = TRUE; + PrivateFile->IsDirectoryPath = TRUE; + PrivateFile->IsOpenedByRead = TRUE; CopyMem (&PrivateFile->EfiFile, &gWinNtFileProtocol, sizeof (gWinNtFileProtocol)); PrivateFile->IsValidFindBuf = FALSE; @@ -226,14 +224,14 @@ WinNtOpenVolume ( // Set DirHandle // PrivateFile->DirHandle = CreateFile ( - PrivateFile->FilePath, - GENERIC_READ, - FILE_SHARE_READ | FILE_SHARE_WRITE, - NULL, - OPEN_EXISTING, - FILE_FLAG_BACKUP_SEMANTICS, - NULL - ); + PrivateFile->FilePath, + GENERIC_READ, + FILE_SHARE_READ | FILE_SHARE_WRITE, + NULL, + OPEN_EXISTING, + FILE_FLAG_BACKUP_SEMANTICS, + NULL + ); if (PrivateFile->DirHandle == INVALID_HANDLE_VALUE) { Status = EFI_NOT_FOUND; @@ -243,12 +241,13 @@ WinNtOpenVolume ( // // Find the first file under it // - Size = StrSize (PrivateFile->FilePath); - Size += StrSize (L"\\*"); + Size = StrSize (PrivateFile->FilePath); + Size += StrSize (L"\\*"); TempFileName = AllocatePool (Size); if (TempFileName == NULL) { goto Done; } + StrCpyS (TempFileName, Size / sizeof (CHAR16), PrivateFile->FilePath); StrCatS (TempFileName, Size / sizeof (CHAR16), L"\\*"); @@ -260,6 +259,7 @@ WinNtOpenVolume ( } else { PrivateFile->IsValidFindBuf = TRUE; } + *Root = &PrivateFile->EfiFile; Status = EFI_SUCCESS; @@ -292,10 +292,10 @@ Done: **/ UINTN CountLeadingDots ( - IN CONST CHAR16 * FileNameToken -) + IN CONST CHAR16 *FileNameToken + ) { - UINTN Num; + UINTN Num; Num = 0; while (*FileNameToken == L'.') { @@ -306,13 +306,13 @@ CountLeadingDots ( return Num; } - BOOLEAN IsFileNameTokenValid ( - IN CONST CHAR16 * FileNameToken -) + IN CONST CHAR16 *FileNameToken + ) { - UINTN Num; + UINTN Num; + if (StrStr (FileNameToken, L"/") != NULL) { // // No L'/' in file name. @@ -337,7 +337,6 @@ IsFileNameTokenValid ( return TRUE; } - /** Return the first string token found in the indirect pointer a String named by FileName. @@ -352,22 +351,23 @@ IsFileNameTokenValid ( **/ CHAR16 * GetNextFileNameToken ( - IN OUT CONST CHAR16 ** FileName -) + IN OUT CONST CHAR16 **FileName + ) { - CHAR16 *SlashPos; - CHAR16 *Token; - UINTN Offset; + CHAR16 *SlashPos; + CHAR16 *Token; + UINTN Offset; + ASSERT (**FileName != L'\\'); ASSERT (**FileName != L'\0'); SlashPos = StrStr (*FileName, L"\\"); if (SlashPos == NULL) { - Token = AllocateCopyPool (StrSize (*FileName), *FileName); + Token = AllocateCopyPool (StrSize (*FileName), *FileName); *FileName = NULL; } else { Offset = SlashPos - *FileName; - Token = AllocateZeroPool ((Offset + 1) * sizeof (CHAR16)); + Token = AllocateZeroPool ((Offset + 1) * sizeof (CHAR16)); StrnCpyS (Token, Offset + 1, *FileName, Offset); // // Point *FileName to the next character after L'\'. @@ -384,7 +384,6 @@ GetNextFileNameToken ( return Token; } - /** Check if a FileName contains only Valid Characters. @@ -400,14 +399,13 @@ GetNextFileNameToken ( @return FALSE FileName contains at least one invalid character. **/ - BOOLEAN IsFileNameValid ( - IN CONST CHAR16 *FileName + IN CONST CHAR16 *FileName ) { - CHAR16 *Token; - BOOLEAN Valid; + CHAR16 *Token; + BOOLEAN Valid; // // If FileName is just L'\', then it is a valid pathname. @@ -415,6 +413,7 @@ IsFileNameValid ( if (StrCmp (FileName, L"\\") == 0) { return TRUE; } + // // We don't support two or more adjacent L'\'. // @@ -425,7 +424,7 @@ IsFileNameValid ( // // Is FileName has a leading L"\", skip to next character. // - if (FileName [0] == L'\\') { + if (FileName[0] == L'\\') { FileName++; } @@ -434,14 +433,14 @@ IsFileNameValid ( Valid = IsFileNameTokenValid (Token); FreePool (Token); - if (!Valid) + if (!Valid) { return FALSE; + } } while (FileName != NULL); return TRUE; } - /** Opens a new file relative to the source file's location. @@ -464,35 +463,34 @@ IsFileNameValid ( **/ EFI_STATUS WinNtFileOpen ( - IN EFI_FILE_PROTOCOL *This, - OUT EFI_FILE_PROTOCOL **NewHandle, - IN CHAR16 *FileName, - IN UINT64 OpenMode, - IN UINT64 Attributes + IN EFI_FILE_PROTOCOL *This, + OUT EFI_FILE_PROTOCOL **NewHandle, + IN CHAR16 *FileName, + IN UINT64 OpenMode, + IN UINT64 Attributes ) { - WIN_NT_EFI_FILE_PRIVATE *PrivateFile; - WIN_NT_EFI_FILE_PRIVATE *NewPrivateFile; - WIN_NT_SIMPLE_FILE_SYSTEM_PRIVATE *PrivateRoot; - EFI_STATUS Status; - CHAR16 *RealFileName; - CHAR16 *TempFileName; - CHAR16 *ParseFileName; - CHAR16 *GuardPointer; - CHAR16 TempChar; - DWORD LastError; - UINTN Count; - BOOLEAN LoopFinish; - UINTN InfoSize; - EFI_FILE_INFO *Info; - UINTN Size; - + WIN_NT_EFI_FILE_PRIVATE *PrivateFile; + WIN_NT_EFI_FILE_PRIVATE *NewPrivateFile; + WIN_NT_SIMPLE_FILE_SYSTEM_PRIVATE *PrivateRoot; + EFI_STATUS Status; + CHAR16 *RealFileName; + CHAR16 *TempFileName; + CHAR16 *ParseFileName; + CHAR16 *GuardPointer; + CHAR16 TempChar; + DWORD LastError; + UINTN Count; + BOOLEAN LoopFinish; + UINTN InfoSize; + EFI_FILE_INFO *Info; + UINTN Size; // // Init local variables // - PrivateFile = WIN_NT_EFI_FILE_PRIVATE_DATA_FROM_THIS (This); - PrivateRoot = WIN_NT_SIMPLE_FILE_SYSTEM_PRIVATE_DATA_FROM_THIS (PrivateFile->SimpleFileSystem); + PrivateFile = WIN_NT_EFI_FILE_PRIVATE_DATA_FROM_THIS (This); + PrivateRoot = WIN_NT_SIMPLE_FILE_SYSTEM_PRIVATE_DATA_FROM_THIS (PrivateFile->SimpleFileSystem); NewPrivateFile = NULL; // @@ -502,6 +500,7 @@ WinNtFileOpen ( if (TempFileName == NULL) { return EFI_OUT_OF_RESOURCES; } + StrCpyS (TempFileName, StrSize (FileName) / sizeof (CHAR16), FileName); FileName = TempFileName; @@ -513,26 +512,30 @@ WinNtFileOpen ( // If file name does not equal to "." or ".." and not trailed with "\..", // then we trim the leading/trailing blanks and trailing dots // - if (StrCmp (FileName, L".") != 0 && StrCmp (FileName, L"..") != 0 && - ((StrLen (FileName) >= 3) ? (StrCmp (&FileName[StrLen (FileName) - 3], L"\\..") != 0) : TRUE)) { + if ((StrCmp (FileName, L".") != 0) && (StrCmp (FileName, L"..") != 0) && + ((StrLen (FileName) >= 3) ? (StrCmp (&FileName[StrLen (FileName) - 3], L"\\..") != 0) : TRUE)) + { // // Trim leading blanks // Count = 0; for (TempFileName = FileName; - *TempFileName != 0 && *TempFileName == L' '; - TempFileName++) { + *TempFileName != 0 && *TempFileName == L' '; + TempFileName++) + { Count++; } + CutPrefix (FileName, Count); // // Trim trailing blanks // for (TempFileName = FileName + StrLen (FileName) - 1; - TempFileName >= FileName && (*TempFileName == L' '); - TempFileName--) { - ; + TempFileName >= FileName && (*TempFileName == L' '); + TempFileName--) + { } + *(TempFileName + 1) = 0; } @@ -567,9 +570,9 @@ WinNtFileOpen ( ); } - Size = StrSize (NewPrivateFile->FilePath); - Size += StrSize (L"\\"); - Size += StrSize (FileName); + Size = StrSize (NewPrivateFile->FilePath); + Size += StrSize (L"\\"); + Size += StrSize (FileName); NewPrivateFile->FileName = AllocatePool (Size); if (NewPrivateFile->FileName == NULL) { Status = EFI_OUT_OF_RESOURCES; @@ -608,15 +611,14 @@ WinNtFileOpen ( LoopFinish = FALSE; while (!LoopFinish) { - LoopFinish = TRUE; for (ParseFileName = GuardPointer; *ParseFileName; ParseFileName++) { - if (*ParseFileName == L'.' && - (*(ParseFileName + 1) == 0 || *(ParseFileName + 1) == L'\\') && - *(ParseFileName - 1) == L'\\' - ) { - + if ((*ParseFileName == L'.') && + ((*(ParseFileName + 1) == 0) || (*(ParseFileName + 1) == L'\\')) && + (*(ParseFileName - 1) == L'\\') + ) + { // // cut \. // @@ -625,12 +627,12 @@ WinNtFileOpen ( break; } - if (*ParseFileName == L'.' && - *(ParseFileName + 1) == L'.' && - (*(ParseFileName + 2) == 0 || *(ParseFileName + 2) == L'\\') && - *(ParseFileName - 1) == L'\\' - ) { - + if ((*ParseFileName == L'.') && + (*(ParseFileName + 1) == L'.') && + ((*(ParseFileName + 2) == 0) || (*(ParseFileName + 2) == L'\\')) && + (*(ParseFileName - 1) == L'\\') + ) + { ParseFileName--; Count = 3; @@ -659,7 +661,7 @@ WinNtFileOpen ( TempChar = 0; if (RealFileName != NewPrivateFile->FileName) { - TempChar = *(RealFileName - 1); + TempChar = *(RealFileName - 1); *(RealFileName - 1) = 0; } @@ -693,14 +695,14 @@ WinNtFileOpen ( } } else { NewPrivateFile->LHandle = CreateFile ( - NewPrivateFile->FileName, - GENERIC_READ, - FILE_SHARE_READ | FILE_SHARE_WRITE, - NULL, - OPEN_EXISTING, - 0, - NULL - ); + NewPrivateFile->FileName, + GENERIC_READ, + FILE_SHARE_READ | FILE_SHARE_WRITE, + NULL, + OPEN_EXISTING, + 0, + NULL + ); if (NewPrivateFile->LHandle != INVALID_HANDLE_VALUE) { NewPrivateFile->IsDirectoryPath = FALSE; @@ -724,9 +726,8 @@ WinNtFileOpen ( // deal with directory // if (NewPrivateFile->IsDirectoryPath) { - - Size = StrSize (NewPrivateFile->FileName); - Size += StrSize (L"\\*"); + Size = StrSize (NewPrivateFile->FileName); + Size += StrSize (L"\\*"); TempFileName = AllocatePool (Size); if (TempFileName == NULL) { Status = EFI_OUT_OF_RESOURCES; @@ -740,7 +741,6 @@ WinNtFileOpen ( // Create a directory // if (!CreateDirectory (TempFileName, NULL)) { - LastError = GetLastError (); if (LastError != ERROR_ALREADY_EXISTS) { FreePool (TempFileName); @@ -751,31 +751,30 @@ WinNtFileOpen ( } NewPrivateFile->DirHandle = CreateFile ( - TempFileName, - NewPrivateFile->IsOpenedByRead ? GENERIC_READ : (GENERIC_READ | GENERIC_WRITE), - FILE_SHARE_READ | FILE_SHARE_WRITE, - NULL, - OPEN_EXISTING, - FILE_FLAG_BACKUP_SEMANTICS, - NULL - ); + TempFileName, + NewPrivateFile->IsOpenedByRead ? GENERIC_READ : (GENERIC_READ | GENERIC_WRITE), + FILE_SHARE_READ | FILE_SHARE_WRITE, + NULL, + OPEN_EXISTING, + FILE_FLAG_BACKUP_SEMANTICS, + NULL + ); if (NewPrivateFile->DirHandle == INVALID_HANDLE_VALUE) { - NewPrivateFile->DirHandle = CreateFile ( - TempFileName, - GENERIC_READ, - FILE_SHARE_READ | FILE_SHARE_WRITE, - NULL, - OPEN_EXISTING, - FILE_FLAG_BACKUP_SEMANTICS, - NULL - ); + TempFileName, + GENERIC_READ, + FILE_SHARE_READ | FILE_SHARE_WRITE, + NULL, + OPEN_EXISTING, + FILE_FLAG_BACKUP_SEMANTICS, + NULL + ); if (NewPrivateFile->DirHandle != INVALID_HANDLE_VALUE) { CloseHandle (NewPrivateFile->DirHandle); NewPrivateFile->DirHandle = INVALID_HANDLE_VALUE; - Status = EFI_ACCESS_DENIED; + Status = EFI_ACCESS_DENIED; } else { Status = EFI_NOT_FOUND; } @@ -802,25 +801,25 @@ WinNtFileOpen ( // if (!NewPrivateFile->IsOpenedByRead) { NewPrivateFile->LHandle = CreateFile ( - NewPrivateFile->FileName, - GENERIC_READ | GENERIC_WRITE, - FILE_SHARE_READ | FILE_SHARE_WRITE, - NULL, - (OpenMode & EFI_FILE_MODE_CREATE) ? OPEN_ALWAYS : OPEN_EXISTING, - 0, - NULL - ); + NewPrivateFile->FileName, + GENERIC_READ | GENERIC_WRITE, + FILE_SHARE_READ | FILE_SHARE_WRITE, + NULL, + (OpenMode & EFI_FILE_MODE_CREATE) ? OPEN_ALWAYS : OPEN_EXISTING, + 0, + NULL + ); if (NewPrivateFile->LHandle == INVALID_HANDLE_VALUE) { NewPrivateFile->LHandle = CreateFile ( - NewPrivateFile->FileName, - GENERIC_READ, - FILE_SHARE_READ | FILE_SHARE_WRITE, - NULL, - OPEN_EXISTING, - 0, - NULL - ); + NewPrivateFile->FileName, + GENERIC_READ, + FILE_SHARE_READ | FILE_SHARE_WRITE, + NULL, + OPEN_EXISTING, + 0, + NULL + ); if (NewPrivateFile->LHandle == INVALID_HANDLE_VALUE) { Status = EFI_NOT_FOUND; @@ -832,14 +831,14 @@ WinNtFileOpen ( } } else { NewPrivateFile->LHandle = CreateFile ( - NewPrivateFile->FileName, - GENERIC_READ, - FILE_SHARE_READ | FILE_SHARE_WRITE, - NULL, - OPEN_EXISTING, - 0, - NULL - ); + NewPrivateFile->FileName, + GENERIC_READ, + FILE_SHARE_READ | FILE_SHARE_WRITE, + NULL, + OPEN_EXISTING, + 0, + NULL + ); if (NewPrivateFile->LHandle == INVALID_HANDLE_VALUE) { Status = EFI_NOT_FOUND; @@ -847,12 +846,12 @@ WinNtFileOpen ( } } - if ((OpenMode & EFI_FILE_MODE_CREATE) && Status == EFI_SUCCESS) { + if ((OpenMode & EFI_FILE_MODE_CREATE) && (Status == EFI_SUCCESS)) { // // Set the attribute // InfoSize = 0; - Info = NULL; + Info = NULL; Status = WinNtFileGetInfo (&NewPrivateFile->EfiFile, &gEfiFileInfoGuid, &InfoSize, Info); @@ -905,8 +904,6 @@ Done: return Status; } - - /** Close the file handle @@ -920,7 +917,7 @@ WinNtFileClose ( IN EFI_FILE_PROTOCOL *This ) { - WIN_NT_EFI_FILE_PRIVATE *PrivateFile; + WIN_NT_EFI_FILE_PRIVATE *PrivateFile; PrivateFile = WIN_NT_EFI_FILE_PRIVATE_DATA_FROM_THIS (This); @@ -934,7 +931,7 @@ WinNtFileClose ( PrivateFile->LHandle = INVALID_HANDLE_VALUE; } - if (PrivateFile->IsDirectoryPath && PrivateFile->DirHandle != INVALID_HANDLE_VALUE) { + if (PrivateFile->IsDirectoryPath && (PrivateFile->DirHandle != INVALID_HANDLE_VALUE)) { CloseHandle (PrivateFile->DirHandle); PrivateFile->DirHandle = INVALID_HANDLE_VALUE; } @@ -950,10 +947,8 @@ WinNtFileClose ( FreePool (PrivateFile); return EFI_SUCCESS; - } - /** Close and delete the file handle. @@ -968,8 +963,8 @@ WinNtFileDelete ( IN EFI_FILE_PROTOCOL *This ) { - EFI_STATUS Status; - WIN_NT_EFI_FILE_PRIVATE *PrivateFile; + EFI_STATUS Status; + WIN_NT_EFI_FILE_PRIVATE *PrivateFile; PrivateFile = WIN_NT_EFI_FILE_PRIVATE_DATA_FROM_THIS (This); @@ -1011,7 +1006,8 @@ WinNtSystemTimeToEfiTime ( IN SYSTEMTIME *SystemTime, IN TIME_ZONE_INFORMATION *TimeZone, OUT EFI_TIME *Time -) + ) + /*++ Routine Description: @@ -1030,14 +1026,14 @@ Returns: --*/ { - Time->Year = (UINT16)SystemTime->wYear; - Time->Month = (UINT8)SystemTime->wMonth; - Time->Day = (UINT8)SystemTime->wDay; - Time->Hour = (UINT8)SystemTime->wHour; - Time->Minute = (UINT8)SystemTime->wMinute; - Time->Second = (UINT8)SystemTime->wSecond; + Time->Year = (UINT16)SystemTime->wYear; + Time->Month = (UINT8)SystemTime->wMonth; + Time->Day = (UINT8)SystemTime->wDay; + Time->Hour = (UINT8)SystemTime->wHour; + Time->Minute = (UINT8)SystemTime->wMinute; + Time->Second = (UINT8)SystemTime->wSecond; Time->Nanosecond = (UINT32)SystemTime->wMilliseconds * 1000000; - Time->TimeZone = (INT16)TimeZone->Bias; + Time->TimeZone = (INT16)TimeZone->Bias; if (TimeZone->StandardDate.wMonth) { Time->Daylight = EFI_TIME_ADJUST_DAYLIGHT; @@ -1054,21 +1050,20 @@ Returns: **/ VOID WinNtFileTimeToEfiTime ( - IN CONST WIN_NT_EFI_FILE_PRIVATE *PrivateFile, - IN TIME_ZONE_INFORMATION *TimeZone, - IN CONST FILETIME *FileTime, - OUT EFI_TIME *EfiTime -) + IN CONST WIN_NT_EFI_FILE_PRIVATE *PrivateFile, + IN TIME_ZONE_INFORMATION *TimeZone, + IN CONST FILETIME *FileTime, + OUT EFI_TIME *EfiTime + ) { - FILETIME TempFileTime; - SYSTEMTIME SystemTime; + FILETIME TempFileTime; + SYSTEMTIME SystemTime; FileTimeToLocalFileTime (FileTime, &TempFileTime); FileTimeToSystemTime (&TempFileTime, &SystemTime); WinNtSystemTimeToEfiTime (&SystemTime, TimeZone, EfiTime); } - /** Read data from the file. @@ -1085,24 +1080,24 @@ WinNtFileTimeToEfiTime ( **/ EFI_STATUS WinNtFileRead ( - IN EFI_FILE_PROTOCOL *This, - IN OUT UINTN *BufferSize, - OUT VOID *Buffer + IN EFI_FILE_PROTOCOL *This, + IN OUT UINTN *BufferSize, + OUT VOID *Buffer ) { - WIN_NT_EFI_FILE_PRIVATE *PrivateFile; - EFI_STATUS Status; - UINTN Size; - UINTN NameSize; - UINTN ResultSize; - UINTN Index; - EFI_FILE_INFO *Info; - WCHAR *pw; - TIME_ZONE_INFORMATION TimeZone; - EFI_FILE_INFO *FileInfo; - UINT64 Pos; - UINT64 FileSize; - UINTN FileInfoSize; + WIN_NT_EFI_FILE_PRIVATE *PrivateFile; + EFI_STATUS Status; + UINTN Size; + UINTN NameSize; + UINTN ResultSize; + UINTN Index; + EFI_FILE_INFO *Info; + WCHAR *pw; + TIME_ZONE_INFORMATION TimeZone; + EFI_FILE_INFO *FileInfo; + UINT64 Pos; + UINT64 FileSize; + UINTN FileInfoSize; PrivateFile = WIN_NT_EFI_FILE_PRIVATE_DATA_FROM_THIS (This); @@ -1112,31 +1107,30 @@ WinNtFileRead ( } if (!PrivateFile->IsDirectoryPath) { - if (This->GetPosition (This, &Pos) != EFI_SUCCESS) { Status = EFI_DEVICE_ERROR; goto Done; } FileInfoSize = SIZE_OF_EFI_FILE_SYSTEM_INFO; - FileInfo = AllocatePool (FileInfoSize); + FileInfo = AllocatePool (FileInfoSize); Status = This->GetInfo ( - This, - &gEfiFileInfoGuid, - &FileInfoSize, - FileInfo - ); + This, + &gEfiFileInfoGuid, + &FileInfoSize, + FileInfo + ); if (Status == EFI_BUFFER_TOO_SMALL) { FreePool (FileInfo); FileInfo = AllocatePool (FileInfoSize); - Status = This->GetInfo ( - This, - &gEfiFileInfoGuid, - &FileInfoSize, - FileInfo - ); + Status = This->GetInfo ( + This, + &gEfiFileInfoGuid, + &FileInfoSize, + FileInfo + ); } if (EFI_ERROR (Status)) { @@ -1160,12 +1154,12 @@ WinNtFileRead ( } Status = ReadFile ( - PrivateFile->LHandle, - Buffer, - (DWORD)*BufferSize, - (LPDWORD)BufferSize, - NULL - ) ? EFI_SUCCESS : EFI_DEVICE_ERROR; + PrivateFile->LHandle, + Buffer, + (DWORD)*BufferSize, + (LPDWORD)BufferSize, + NULL + ) ? EFI_SUCCESS : EFI_DEVICE_ERROR; goto Done; } @@ -1174,7 +1168,7 @@ WinNtFileRead ( // if (!PrivateFile->IsValidFindBuf) { *BufferSize = 0; - Status = EFI_SUCCESS; + Status = EFI_SUCCESS; goto Done; } @@ -1244,8 +1238,6 @@ Done: return Status; } - - /** Write data to a file. @@ -1266,13 +1258,13 @@ Done: **/ EFI_STATUS WinNtFileWrite ( - IN EFI_FILE_PROTOCOL *This, - IN OUT UINTN *BufferSize, - IN VOID *Buffer + IN EFI_FILE_PROTOCOL *This, + IN OUT UINTN *BufferSize, + IN VOID *Buffer ) { - WIN_NT_EFI_FILE_PRIVATE *PrivateFile; - EFI_STATUS Status; + WIN_NT_EFI_FILE_PRIVATE *PrivateFile; + EFI_STATUS Status; PrivateFile = WIN_NT_EFI_FILE_PRIVATE_DATA_FROM_THIS (This); @@ -1292,12 +1284,12 @@ WinNtFileWrite ( } Status = WriteFile ( - PrivateFile->LHandle, - Buffer, - (DWORD)*BufferSize, - (LPDWORD)BufferSize, - NULL - ) ? EFI_SUCCESS : EFI_DEVICE_ERROR; + PrivateFile->LHandle, + Buffer, + (DWORD)*BufferSize, + (LPDWORD)BufferSize, + NULL + ) ? EFI_SUCCESS : EFI_DEVICE_ERROR; Done: return Status; @@ -1307,8 +1299,6 @@ Done: // } - - /** Set a files current position @@ -1321,16 +1311,16 @@ Done: **/ EFI_STATUS WinNtFileSetPossition ( - IN EFI_FILE_PROTOCOL *This, - IN UINT64 Position + IN EFI_FILE_PROTOCOL *This, + IN UINT64 Position ) { - EFI_STATUS Status; - WIN_NT_EFI_FILE_PRIVATE *PrivateFile; - UINT32 PosLow; - UINT32 PosHigh; - CHAR16 *FileName; - UINTN Size; + EFI_STATUS Status; + WIN_NT_EFI_FILE_PRIVATE *PrivateFile; + UINT32 PosLow; + UINT32 PosHigh; + CHAR16 *FileName; + UINTN Size; PrivateFile = WIN_NT_EFI_FILE_PRIVATE_DATA_FROM_THIS (This); @@ -1340,8 +1330,8 @@ WinNtFileSetPossition ( goto Done; } - Size = StrSize (PrivateFile->FileName); - Size += StrSize (L"\\*"); + Size = StrSize (PrivateFile->FileName); + Size += StrSize (L"\\*"); FileName = AllocatePool (Size); if (FileName == NULL) { Status = EFI_OUT_OF_RESOURCES; @@ -1382,8 +1372,6 @@ Done: return Status; } - - /** Get a file's current position @@ -1396,41 +1384,38 @@ Done: **/ EFI_STATUS WinNtFileGetPossition ( - IN EFI_FILE_PROTOCOL *This, - OUT UINT64 *Position + IN EFI_FILE_PROTOCOL *This, + OUT UINT64 *Position ) { - EFI_STATUS Status; - WIN_NT_EFI_FILE_PRIVATE *PrivateFile; - INT32 PositionHigh; - UINT64 PosHigh64; + EFI_STATUS Status; + WIN_NT_EFI_FILE_PRIVATE *PrivateFile; + INT32 PositionHigh; + UINT64 PosHigh64; PrivateFile = WIN_NT_EFI_FILE_PRIVATE_DATA_FROM_THIS (This); PositionHigh = 0; - PosHigh64 = 0; + PosHigh64 = 0; if (PrivateFile->IsDirectoryPath) { - Status = EFI_UNSUPPORTED; goto Done; - } else { - PositionHigh = 0; - *Position = SetFilePointer ( - PrivateFile->LHandle, - 0, - (PLONG)&PositionHigh, - FILE_CURRENT - ); + *Position = SetFilePointer ( + PrivateFile->LHandle, + 0, + (PLONG)&PositionHigh, + FILE_CURRENT + ); Status = *Position == 0xffffffff ? EFI_DEVICE_ERROR : EFI_SUCCESS; if (EFI_ERROR (Status)) { goto Done; } - PosHigh64 = PositionHigh; + PosHigh64 = PositionHigh; *Position += LShiftU64 (PosHigh64, 32); } @@ -1438,13 +1423,13 @@ Done: return Status; } - EFI_STATUS WinNtSimpleFileSystemFileInfo ( IN WIN_NT_EFI_FILE_PRIVATE *PrivateFile, IN OUT UINTN *BufferSize, OUT VOID *Buffer -) + ) + /*++ Routine Description: @@ -1476,7 +1461,7 @@ Returns: Size = SIZE_OF_EFI_FILE_INFO; RealFileName = PrivateFile->FileName; - TempPointer = RealFileName; + TempPointer = RealFileName; while (*TempPointer) { if (*TempPointer == '\\') { RealFileName = TempPointer + 1; @@ -1484,6 +1469,7 @@ Returns: TempPointer++; } + NameSize = StrSize (RealFileName); ResultSize = Size + NameSize; @@ -1499,8 +1485,8 @@ Returns: GetFileInformationByHandle ( PrivateFile->IsDirectoryPath ? PrivateFile->DirHandle : PrivateFile->LHandle, &FileInfo - ); - Info->FileSize = FileInfo.nFileSizeLow; + ); + Info->FileSize = FileInfo.nFileSizeLow; Info->PhysicalSize = Info->FileSize; GetTimeZoneInformation (&TimeZone); @@ -1563,27 +1549,27 @@ Returns: **/ EFI_STATUS WinNtFileGetInfo ( - IN EFI_FILE_PROTOCOL *This, - IN EFI_GUID *InformationType, - IN OUT UINTN *BufferSize, - OUT VOID *Buffer + IN EFI_FILE_PROTOCOL *This, + IN EFI_GUID *InformationType, + IN OUT UINTN *BufferSize, + OUT VOID *Buffer ) { - EFI_STATUS Status; - WIN_NT_EFI_FILE_PRIVATE *PrivateFile; - EFI_FILE_SYSTEM_INFO *FileSystemInfoBuffer; - UINT32 SectorsPerCluster; - UINT32 BytesPerSector; - UINT32 FreeClusters; - UINT32 TotalClusters; - UINT32 BytesPerCluster; - CHAR16 *DriveName; - BOOLEAN DriveNameFound; - BOOL NtStatus; - UINTN Index; - WIN_NT_SIMPLE_FILE_SYSTEM_PRIVATE *PrivateRoot; - - if (This == NULL || InformationType == NULL || BufferSize == NULL) { + EFI_STATUS Status; + WIN_NT_EFI_FILE_PRIVATE *PrivateFile; + EFI_FILE_SYSTEM_INFO *FileSystemInfoBuffer; + UINT32 SectorsPerCluster; + UINT32 BytesPerSector; + UINT32 FreeClusters; + UINT32 TotalClusters; + UINT32 BytesPerCluster; + CHAR16 *DriveName; + BOOLEAN DriveNameFound; + BOOL NtStatus; + UINTN Index; + WIN_NT_SIMPLE_FILE_SYSTEM_PRIVATE *PrivateRoot; + + if ((This == NULL) || (InformationType == NULL) || (BufferSize == NULL)) { return EFI_INVALID_PARAMETER; } @@ -1599,19 +1585,19 @@ WinNtFileGetInfo ( if (CompareGuid (InformationType, &gEfiFileSystemInfoGuid)) { if (*BufferSize < SIZE_OF_EFI_FILE_SYSTEM_INFO + StrSize (PrivateRoot->VolumeLabel)) { *BufferSize = SIZE_OF_EFI_FILE_SYSTEM_INFO + StrSize (PrivateRoot->VolumeLabel); - Status = EFI_BUFFER_TOO_SMALL; + Status = EFI_BUFFER_TOO_SMALL; goto Done; } - FileSystemInfoBuffer = (EFI_FILE_SYSTEM_INFO *)Buffer; - FileSystemInfoBuffer->Size = SIZE_OF_EFI_FILE_SYSTEM_INFO + StrSize (PrivateRoot->VolumeLabel); + FileSystemInfoBuffer = (EFI_FILE_SYSTEM_INFO *)Buffer; + FileSystemInfoBuffer->Size = SIZE_OF_EFI_FILE_SYSTEM_INFO + StrSize (PrivateRoot->VolumeLabel); FileSystemInfoBuffer->ReadOnly = FALSE; // // Try to get the drive name // DriveNameFound = FALSE; - DriveName = AllocatePool (StrSize (PrivateFile->FilePath) + 1); + DriveName = AllocatePool (StrSize (PrivateFile->FilePath) + 1); if (DriveName == NULL) { Status = EFI_OUT_OF_RESOURCES; goto Done; @@ -1623,25 +1609,22 @@ WinNtFileGetInfo ( PrivateFile->FilePath ); for (Index = 0; DriveName[Index] != 0 && DriveName[Index] != ':'; Index++) { - ; } if (DriveName[Index] == ':') { DriveName[Index + 1] = '\\'; DriveName[Index + 2] = 0; - DriveNameFound = TRUE; - } else if (DriveName[0] == '\\' && DriveName[1] == '\\') { + DriveNameFound = TRUE; + } else if ((DriveName[0] == '\\') && (DriveName[1] == '\\')) { for (Index = 2; DriveName[Index] != 0 && DriveName[Index] != '\\'; Index++) { - ; } if (DriveName[Index] == '\\') { DriveNameFound = TRUE; for (Index++; DriveName[Index] != 0 && DriveName[Index] != '\\'; Index++) { - ; } - DriveName[Index] = '\\'; + DriveName[Index] = '\\'; DriveName[Index + 1] = 0; } } @@ -1650,12 +1633,12 @@ WinNtFileGetInfo ( // Try GetDiskFreeSpace first // NtStatus = GetDiskFreeSpace ( - DriveNameFound ? DriveName : NULL, - (LPDWORD)&SectorsPerCluster, - (LPDWORD)&BytesPerSector, - (LPDWORD)&FreeClusters, - (LPDWORD)&TotalClusters - ); + DriveNameFound ? DriveName : NULL, + (LPDWORD)&SectorsPerCluster, + (LPDWORD)&BytesPerSector, + (LPDWORD)&FreeClusters, + (LPDWORD)&TotalClusters + ); if (DriveName) { FreePool (DriveName); } @@ -1664,22 +1647,21 @@ WinNtFileGetInfo ( // // Succeeded // - BytesPerCluster = BytesPerSector * SectorsPerCluster; + BytesPerCluster = BytesPerSector * SectorsPerCluster; FileSystemInfoBuffer->VolumeSize = MultU64x32 (TotalClusters, BytesPerCluster); - FileSystemInfoBuffer->FreeSpace = MultU64x32 (FreeClusters, BytesPerCluster); - FileSystemInfoBuffer->BlockSize = BytesPerCluster; - + FileSystemInfoBuffer->FreeSpace = MultU64x32 (FreeClusters, BytesPerCluster); + FileSystemInfoBuffer->BlockSize = BytesPerCluster; } else { // // try GetDiskFreeSpaceEx then // FileSystemInfoBuffer->BlockSize = 0; - NtStatus = GetDiskFreeSpaceEx ( - PrivateFile->FilePath, - (PULARGE_INTEGER)(&FileSystemInfoBuffer->FreeSpace), - (PULARGE_INTEGER)(&FileSystemInfoBuffer->VolumeSize), - NULL - ); + NtStatus = GetDiskFreeSpaceEx ( + PrivateFile->FilePath, + (PULARGE_INTEGER)(&FileSystemInfoBuffer->FreeSpace), + (PULARGE_INTEGER)(&FileSystemInfoBuffer->VolumeSize), + NULL + ); if (!NtStatus) { Status = EFI_DEVICE_ERROR; goto Done; @@ -1692,13 +1674,13 @@ WinNtFileGetInfo ( PrivateRoot->VolumeLabel ); *BufferSize = SIZE_OF_EFI_FILE_SYSTEM_INFO + StrSize (PrivateRoot->VolumeLabel); - Status = EFI_SUCCESS; + Status = EFI_SUCCESS; } if (CompareGuid (InformationType, &gEfiFileSystemVolumeLabelInfoIdGuid)) { if (*BufferSize < StrSize (PrivateRoot->VolumeLabel)) { *BufferSize = StrSize (PrivateRoot->VolumeLabel); - Status = EFI_BUFFER_TOO_SMALL; + Status = EFI_BUFFER_TOO_SMALL; goto Done; } @@ -1708,14 +1690,13 @@ WinNtFileGetInfo ( PrivateRoot->VolumeLabel ); *BufferSize = StrSize (PrivateRoot->VolumeLabel); - Status = EFI_SUCCESS; + Status = EFI_SUCCESS; } Done: return Status; } - /** Set information about a file @@ -1735,39 +1716,39 @@ Done: **/ EFI_STATUS WinNtFileSetInfo ( - IN EFI_FILE_PROTOCOL *This, - IN EFI_GUID *InformationType, - IN UINTN BufferSize, - IN VOID *Buffer + IN EFI_FILE_PROTOCOL *This, + IN EFI_GUID *InformationType, + IN UINTN BufferSize, + IN VOID *Buffer ) { - WIN_NT_SIMPLE_FILE_SYSTEM_PRIVATE *PrivateRoot; - WIN_NT_EFI_FILE_PRIVATE *PrivateFile; - EFI_FILE_INFO *OldFileInfo; - EFI_FILE_INFO *NewFileInfo; - EFI_STATUS Status; - UINTN OldInfoSize; - INTN NtStatus; - UINT32 NewAttr; - UINT32 OldAttr; - CHAR16 *OldFileName; - CHAR16 *NewFileName; - CHAR16 *TempFileName; - CHAR16 *CharPointer; - BOOLEAN AttrChangeFlag; - BOOLEAN NameChangeFlag; - BOOLEAN SizeChangeFlag; - BOOLEAN TimeChangeFlag; - UINT64 CurPos; - SYSTEMTIME NewCreationSystemTime; - SYSTEMTIME NewLastAccessSystemTime; - SYSTEMTIME NewLastWriteSystemTime; - FILETIME NewCreationFileTime; - FILETIME NewLastAccessFileTime; - FILETIME NewLastWriteFileTime; - WIN32_FIND_DATA FindBuf; - EFI_FILE_SYSTEM_INFO *NewFileSystemInfo; - UINTN Size; + WIN_NT_SIMPLE_FILE_SYSTEM_PRIVATE *PrivateRoot; + WIN_NT_EFI_FILE_PRIVATE *PrivateFile; + EFI_FILE_INFO *OldFileInfo; + EFI_FILE_INFO *NewFileInfo; + EFI_STATUS Status; + UINTN OldInfoSize; + INTN NtStatus; + UINT32 NewAttr; + UINT32 OldAttr; + CHAR16 *OldFileName; + CHAR16 *NewFileName; + CHAR16 *TempFileName; + CHAR16 *CharPointer; + BOOLEAN AttrChangeFlag; + BOOLEAN NameChangeFlag; + BOOLEAN SizeChangeFlag; + BOOLEAN TimeChangeFlag; + UINT64 CurPos; + SYSTEMTIME NewCreationSystemTime; + SYSTEMTIME NewLastAccessSystemTime; + SYSTEMTIME NewLastWriteSystemTime; + FILETIME NewCreationFileTime; + FILETIME NewLastAccessFileTime; + FILETIME NewLastWriteFileTime; + WIN32_FIND_DATA FindBuf; + EFI_FILE_SYSTEM_INFO *NewFileSystemInfo; + UINTN Size; // // Initialise locals. @@ -1775,9 +1756,9 @@ WinNtFileSetInfo ( PrivateFile = WIN_NT_EFI_FILE_PRIVATE_DATA_FROM_THIS (This); PrivateRoot = WIN_NT_SIMPLE_FILE_SYSTEM_PRIVATE_DATA_FROM_THIS (PrivateFile->SimpleFileSystem); - Status = EFI_UNSUPPORTED; - OldFileInfo = NewFileInfo = NULL; - OldFileName = NewFileName = NULL; + Status = EFI_UNSUPPORTED; + OldFileInfo = NewFileInfo = NULL; + OldFileName = NewFileName = NULL; AttrChangeFlag = NameChangeFlag = SizeChangeFlag = TimeChangeFlag = FALSE; // @@ -1790,7 +1771,6 @@ WinNtFileSetInfo ( goto Done; } - FreePool (PrivateRoot->VolumeLabel); PrivateRoot->VolumeLabel = AllocatePool (StrSize (NewFileSystemInfo->VolumeLabel)); if (PrivateRoot->VolumeLabel == NULL) { @@ -1847,9 +1827,10 @@ WinNtFileSetInfo ( NewFileInfo = (EFI_FILE_INFO *)Buffer; if ((NewFileInfo->Size <= SIZE_OF_EFI_FILE_INFO) || - (NewFileInfo->Attribute &~(EFI_FILE_VALID_ATTR)) || - (sizeof (UINTN) == 4 && NewFileInfo->Size > 0xFFFFFFFF) - ) { + (NewFileInfo->Attribute &~(EFI_FILE_VALID_ATTR)) || + ((sizeof (UINTN) == 4) && (NewFileInfo->Size > 0xFFFFFFFF)) + ) + { Status = EFI_INVALID_PARAMETER; goto Done; } @@ -1865,7 +1846,7 @@ WinNtFileSetInfo ( // of change request this is. // OldInfoSize = 0; - Status = WinNtSimpleFileSystemFileInfo (PrivateFile, &OldInfoSize, NULL); + Status = WinNtSimpleFileSystemFileInfo (PrivateFile, &OldInfoSize, NULL); if (Status != EFI_BUFFER_TOO_SMALL) { Status = EFI_DEVICE_ERROR; @@ -1900,9 +1881,9 @@ WinNtFileSetInfo ( // Make full pathname from new filename and rootpath. // if (NewFileInfo->FileName[0] == '\\') { - Size = StrSize (PrivateRoot->FilePath); - Size += StrSize (L"\\"); - Size += StrSize (NewFileInfo->FileName); + Size = StrSize (PrivateRoot->FilePath); + Size += StrSize (L"\\"); + Size += StrSize (NewFileInfo->FileName); NewFileName = AllocatePool (Size); if (NewFileName == NULL) { Status = EFI_OUT_OF_RESOURCES; @@ -1913,9 +1894,9 @@ WinNtFileSetInfo ( StrCatS (NewFileName, Size / sizeof (CHAR16), L"\\"); StrCatS (NewFileName, Size / sizeof (CHAR16), NewFileInfo->FileName + 1); } else { - Size = StrSize (PrivateFile->FilePath); - Size += StrSize (L"\\"); - Size += StrSize (NewFileInfo->FileName); + Size = StrSize (PrivateFile->FilePath); + Size += StrSize (L"\\"); + Size += StrSize (NewFileInfo->FileName); NewFileName = AllocatePool (Size); if (NewFileName == NULL) { Status = EFI_OUT_OF_RESOURCES; @@ -1958,16 +1939,19 @@ WinNtFileSetInfo ( // Is there a time stamp change request? // if (!IsZero (&NewFileInfo->CreateTime, sizeof (EFI_TIME)) && - CompareMem (&NewFileInfo->CreateTime, &OldFileInfo->CreateTime, sizeof (EFI_TIME)) - ) { + CompareMem (&NewFileInfo->CreateTime, &OldFileInfo->CreateTime, sizeof (EFI_TIME)) + ) + { TimeChangeFlag = TRUE; } else if (!IsZero (&NewFileInfo->LastAccessTime, sizeof (EFI_TIME)) && - CompareMem (&NewFileInfo->LastAccessTime, &OldFileInfo->LastAccessTime, sizeof (EFI_TIME)) - ) { + CompareMem (&NewFileInfo->LastAccessTime, &OldFileInfo->LastAccessTime, sizeof (EFI_TIME)) + ) + { TimeChangeFlag = TRUE; } else if (!IsZero (&NewFileInfo->ModificationTime, sizeof (EFI_TIME)) && - CompareMem (&NewFileInfo->ModificationTime, &OldFileInfo->ModificationTime, sizeof (EFI_TIME)) - ) { + CompareMem (&NewFileInfo->ModificationTime, &OldFileInfo->ModificationTime, sizeof (EFI_TIME)) + ) + { TimeChangeFlag = TRUE; } @@ -2013,7 +1997,7 @@ WinNtFileSetInfo ( } } - if (PrivateFile->IsDirectoryPath && PrivateFile->DirHandle != INVALID_HANDLE_VALUE) { + if (PrivateFile->IsDirectoryPath && (PrivateFile->DirHandle != INVALID_HANDLE_VALUE)) { CloseHandle (PrivateFile->DirHandle); PrivateFile->DirHandle = INVALID_HANDLE_VALUE; } @@ -2034,22 +2018,22 @@ WinNtFileSetInfo ( StrCpyS (PrivateFile->FileName, StrSize (NewFileName) / sizeof (CHAR16), NewFileName); - Size = StrSize (NewFileName); - Size += StrSize (L"\\*"); + Size = StrSize (NewFileName); + Size += StrSize (L"\\*"); TempFileName = AllocatePool (Size); StrCpyS (TempFileName, Size / sizeof (CHAR16), NewFileName); if (!PrivateFile->IsDirectoryPath) { PrivateFile->LHandle = CreateFile ( - TempFileName, - PrivateFile->IsOpenedByRead ? GENERIC_READ : GENERIC_READ | GENERIC_WRITE, - FILE_SHARE_READ | FILE_SHARE_WRITE, - NULL, - OPEN_EXISTING, - 0, - NULL - ); + TempFileName, + PrivateFile->IsOpenedByRead ? GENERIC_READ : GENERIC_READ | GENERIC_WRITE, + FILE_SHARE_READ | FILE_SHARE_WRITE, + NULL, + OPEN_EXISTING, + 0, + NULL + ); FreePool (TempFileName); @@ -2062,14 +2046,14 @@ WinNtFileSetInfo ( } } else { PrivateFile->DirHandle = CreateFile ( - TempFileName, - PrivateFile->IsOpenedByRead ? GENERIC_READ : GENERIC_READ | GENERIC_WRITE, - FILE_SHARE_READ | FILE_SHARE_WRITE, - NULL, - OPEN_EXISTING, - FILE_FLAG_BACKUP_SEMANTICS, - NULL - ); + TempFileName, + PrivateFile->IsOpenedByRead ? GENERIC_READ : GENERIC_READ | GENERIC_WRITE, + FILE_SHARE_READ | FILE_SHARE_WRITE, + NULL, + OPEN_EXISTING, + FILE_FLAG_BACKUP_SEMANTICS, + NULL + ); StrCatS (TempFileName, Size / sizeof (CHAR16), L"\\*"); PrivateFile->LHandle = FindFirstFile (TempFileName, &FindBuf); @@ -2078,7 +2062,7 @@ WinNtFileSetInfo ( } } else { Status = EFI_ACCESS_DENIED; - Reopen:; +Reopen:; NtStatus = SetFileAttributes (OldFileName, OldAttr); @@ -2086,32 +2070,32 @@ WinNtFileSetInfo ( goto Done; } - Size = StrSize (OldFileName); - Size += StrSize (L"\\*"); + Size = StrSize (OldFileName); + Size += StrSize (L"\\*"); TempFileName = AllocatePool (Size); StrCpyS (TempFileName, Size / sizeof (CHAR16), OldFileName); if (!PrivateFile->IsDirectoryPath) { PrivateFile->LHandle = CreateFile ( - TempFileName, - PrivateFile->IsOpenedByRead ? GENERIC_READ : GENERIC_READ | GENERIC_WRITE, - FILE_SHARE_READ | FILE_SHARE_WRITE, - NULL, - OPEN_EXISTING, - 0, - NULL - ); + TempFileName, + PrivateFile->IsOpenedByRead ? GENERIC_READ : GENERIC_READ | GENERIC_WRITE, + FILE_SHARE_READ | FILE_SHARE_WRITE, + NULL, + OPEN_EXISTING, + 0, + NULL + ); } else { PrivateFile->DirHandle = CreateFile ( - TempFileName, - PrivateFile->IsOpenedByRead ? GENERIC_READ : GENERIC_READ | GENERIC_WRITE, - FILE_SHARE_READ | FILE_SHARE_WRITE, - NULL, - OPEN_EXISTING, - FILE_FLAG_BACKUP_SEMANTICS, - NULL - ); + TempFileName, + PrivateFile->IsOpenedByRead ? GENERIC_READ : GENERIC_READ | GENERIC_WRITE, + FILE_SHARE_READ | FILE_SHARE_WRITE, + NULL, + OPEN_EXISTING, + FILE_FLAG_BACKUP_SEMANTICS, + NULL + ); StrCatS (TempFileName, Size / sizeof (CHAR16), L"\\*"); PrivateFile->LHandle = FindFirstFile (TempFileName, &FindBuf); @@ -2120,7 +2104,6 @@ WinNtFileSetInfo ( FreePool (TempFileName); goto Done; - } } @@ -2163,83 +2146,88 @@ WinNtFileSetInfo ( // Time change // if (TimeChangeFlag) { - - NewCreationSystemTime.wYear = NewFileInfo->CreateTime.Year; - NewCreationSystemTime.wMonth = NewFileInfo->CreateTime.Month; - NewCreationSystemTime.wDay = NewFileInfo->CreateTime.Day; - NewCreationSystemTime.wHour = NewFileInfo->CreateTime.Hour; - NewCreationSystemTime.wMinute = NewFileInfo->CreateTime.Minute; - NewCreationSystemTime.wSecond = NewFileInfo->CreateTime.Second; + NewCreationSystemTime.wYear = NewFileInfo->CreateTime.Year; + NewCreationSystemTime.wMonth = NewFileInfo->CreateTime.Month; + NewCreationSystemTime.wDay = NewFileInfo->CreateTime.Day; + NewCreationSystemTime.wHour = NewFileInfo->CreateTime.Hour; + NewCreationSystemTime.wMinute = NewFileInfo->CreateTime.Minute; + NewCreationSystemTime.wSecond = NewFileInfo->CreateTime.Second; NewCreationSystemTime.wMilliseconds = 0; if (!SystemTimeToFileTime ( - &NewCreationSystemTime, - &NewCreationFileTime - )) { + &NewCreationSystemTime, + &NewCreationFileTime + )) + { goto Done; } if (!LocalFileTimeToFileTime ( - &NewCreationFileTime, - &NewCreationFileTime - )) { + &NewCreationFileTime, + &NewCreationFileTime + )) + { goto Done; } - NewLastAccessSystemTime.wYear = NewFileInfo->LastAccessTime.Year; - NewLastAccessSystemTime.wMonth = NewFileInfo->LastAccessTime.Month; - NewLastAccessSystemTime.wDay = NewFileInfo->LastAccessTime.Day; - NewLastAccessSystemTime.wHour = NewFileInfo->LastAccessTime.Hour; - NewLastAccessSystemTime.wMinute = NewFileInfo->LastAccessTime.Minute; - NewLastAccessSystemTime.wSecond = NewFileInfo->LastAccessTime.Second; + NewLastAccessSystemTime.wYear = NewFileInfo->LastAccessTime.Year; + NewLastAccessSystemTime.wMonth = NewFileInfo->LastAccessTime.Month; + NewLastAccessSystemTime.wDay = NewFileInfo->LastAccessTime.Day; + NewLastAccessSystemTime.wHour = NewFileInfo->LastAccessTime.Hour; + NewLastAccessSystemTime.wMinute = NewFileInfo->LastAccessTime.Minute; + NewLastAccessSystemTime.wSecond = NewFileInfo->LastAccessTime.Second; NewLastAccessSystemTime.wMilliseconds = 0; if (!SystemTimeToFileTime ( - &NewLastAccessSystemTime, - &NewLastAccessFileTime - )) { + &NewLastAccessSystemTime, + &NewLastAccessFileTime + )) + { goto Done; } if (!LocalFileTimeToFileTime ( - &NewLastAccessFileTime, - &NewLastAccessFileTime - )) { + &NewLastAccessFileTime, + &NewLastAccessFileTime + )) + { goto Done; } - NewLastWriteSystemTime.wYear = NewFileInfo->ModificationTime.Year; - NewLastWriteSystemTime.wMonth = NewFileInfo->ModificationTime.Month; - NewLastWriteSystemTime.wDay = NewFileInfo->ModificationTime.Day; - NewLastWriteSystemTime.wHour = NewFileInfo->ModificationTime.Hour; - NewLastWriteSystemTime.wMinute = NewFileInfo->ModificationTime.Minute; - NewLastWriteSystemTime.wSecond = NewFileInfo->ModificationTime.Second; + NewLastWriteSystemTime.wYear = NewFileInfo->ModificationTime.Year; + NewLastWriteSystemTime.wMonth = NewFileInfo->ModificationTime.Month; + NewLastWriteSystemTime.wDay = NewFileInfo->ModificationTime.Day; + NewLastWriteSystemTime.wHour = NewFileInfo->ModificationTime.Hour; + NewLastWriteSystemTime.wMinute = NewFileInfo->ModificationTime.Minute; + NewLastWriteSystemTime.wSecond = NewFileInfo->ModificationTime.Second; NewLastWriteSystemTime.wMilliseconds = 0; if (!SystemTimeToFileTime ( - &NewLastWriteSystemTime, - &NewLastWriteFileTime - )) { + &NewLastWriteSystemTime, + &NewLastWriteFileTime + )) + { goto Done; } if (!LocalFileTimeToFileTime ( - &NewLastWriteFileTime, - &NewLastWriteFileTime - )) { + &NewLastWriteFileTime, + &NewLastWriteFileTime + )) + { goto Done; } if (!SetFileTime ( - PrivateFile->IsDirectoryPath ? PrivateFile->DirHandle : PrivateFile->LHandle, - &NewCreationFileTime, - &NewLastAccessFileTime, - &NewLastWriteFileTime - )) { + PrivateFile->IsDirectoryPath ? PrivateFile->DirHandle : PrivateFile->LHandle, + &NewCreationFileTime, + &NewLastAccessFileTime, + &NewLastWriteFileTime + )) + { Status = EFI_DEVICE_ERROR; goto Done; } - } // @@ -2295,7 +2283,6 @@ Done: return Status; } - /** Flush data back for the file handle. @@ -2351,14 +2338,11 @@ Done: // // bugbug: - Use Windows error reporting. // - } - - EFI_STATUS WinNtFileSystmeThunkOpen ( - IN EMU_IO_THUNK_PROTOCOL *This + IN EMU_IO_THUNK_PROTOCOL *This ) { WIN_NT_SIMPLE_FILE_SYSTEM_PRIVATE *Private; @@ -2390,10 +2374,9 @@ WinNtFileSystmeThunkOpen ( return EFI_SUCCESS; } - EFI_STATUS WinNtFileSystmeThunkClose ( - IN EMU_IO_THUNK_PROTOCOL *This + IN EMU_IO_THUNK_PROTOCOL *This ) { WIN_NT_SIMPLE_FILE_SYSTEM_PRIVATE *Private; @@ -2404,15 +2387,16 @@ WinNtFileSystmeThunkClose ( if (Private->VolumeLabel != NULL) { FreePool (Private->VolumeLabel); } + if (Private->FilePath != NULL) { FreePool (Private->FilePath); } + FreePool (Private); return EFI_SUCCESS; } - -EFI_FILE_PROTOCOL gWinNtFileProtocol = { +EFI_FILE_PROTOCOL gWinNtFileProtocol = { EFI_FILE_REVISION, WinNtFileOpen, WinNtFileClose, @@ -2426,13 +2410,12 @@ EFI_FILE_PROTOCOL gWinNtFileProtocol = { WinNtFileFlush }; -EFI_SIMPLE_FILE_SYSTEM_PROTOCOL gWinNtFileSystemProtocol = { +EFI_SIMPLE_FILE_SYSTEM_PROTOCOL gWinNtFileSystemProtocol = { EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_REVISION, WinNtOpenVolume }; - -EMU_IO_THUNK_PROTOCOL mWinNtFileSystemThunkIo = { +EMU_IO_THUNK_PROTOCOL mWinNtFileSystemThunkIo = { &gEfiSimpleFileSystemProtocolGuid, NULL, NULL, @@ -2441,5 +2424,3 @@ EMU_IO_THUNK_PROTOCOL mWinNtFileSystemThunkIo = { WinNtFileSystmeThunkClose, NULL }; - - diff --git a/EmulatorPkg/Win/Host/WinGop.h b/EmulatorPkg/Win/Host/WinGop.h index 7a8f01a37c..2799778ca9 100644 --- a/EmulatorPkg/Win/Host/WinGop.h +++ b/EmulatorPkg/Win/Host/WinGop.h @@ -17,7 +17,6 @@ Abstract: #ifndef _WIN_GOP_H_ #define _WIN_GOP_H_ - #include "WinHost.h" #include @@ -39,87 +38,85 @@ Abstract: // The value is 1 if the ALT key is down while the key is pressed/released; // it is 0 if the WM_SYSKEYDOWN message is posted to the active window // because no window has the keyboard focus. -#define GOP_EXTENDED_KEY (0x1 << 24) -#define GOP_ALT_KEY_PRESSED (0x1 << 29) +#define GOP_EXTENDED_KEY (0x1 << 24) +#define GOP_ALT_KEY_PRESSED (0x1 << 29) -#define KEYBOARD_TIMER_INTERVAL 200000 // 0.02s +#define KEYBOARD_TIMER_INTERVAL 200000 // 0.02s -#define MAX_Q 256 +#define MAX_Q 256 typedef struct { - UINTN Front; - UINTN Rear; - EFI_KEY_DATA Q[MAX_Q]; - CRITICAL_SECTION Cs; + UINTN Front; + UINTN Rear; + EFI_KEY_DATA Q[MAX_Q]; + CRITICAL_SECTION Cs; } GOP_QUEUE_FIXED; -#define WIN_NT_GOP_CLASS_NAME L"WinNtGopWindow" - +#define WIN_NT_GOP_CLASS_NAME L"WinNtGopWindow" typedef struct { - UINT64 Signature; - EMU_GRAPHICS_WINDOW_PROTOCOL GraphicsWindowIo; + UINT64 Signature; + EMU_GRAPHICS_WINDOW_PROTOCOL GraphicsWindowIo; // // GOP Private Data knowing when to start hardware // - BOOLEAN HardwareNeedsStarting; + BOOLEAN HardwareNeedsStarting; - CHAR16 *WindowName; - CHAR16 Buffer[160]; + CHAR16 *WindowName; + CHAR16 Buffer[160]; - HANDLE ThreadInited; // Semaphore - HANDLE ThreadHandle; // Thread - DWORD ThreadId; + HANDLE ThreadInited; // Semaphore + HANDLE ThreadHandle; // Thread + DWORD ThreadId; - HWND WindowHandle; - WNDCLASSEX WindowsClass; + HWND WindowHandle; + WNDCLASSEX WindowsClass; - UINT32 Width; - UINT32 Height; + UINT32 Width; + UINT32 Height; // // This screen is used to redraw the screen when windows events happen. It's // updated in the main thread and displayed in the windows thread. // - BITMAPV4HEADER *VirtualScreenInfo; + BITMAPV4HEADER *VirtualScreenInfo; - FRAME_BUFFER_CONFIGURE *FrameBufferConfigure; + FRAME_BUFFER_CONFIGURE *FrameBufferConfigure; // // Keyboard Queue used by Simple Text In. // QueueForRead: WinProc thread adds, and main thread removes. // - GOP_QUEUE_FIXED QueueForRead; + GOP_QUEUE_FIXED QueueForRead; EMU_GRAPHICS_WINDOW_REGISTER_KEY_NOTIFY_CALLBACK MakeRegisterdKeyCallback; EMU_GRAPHICS_WINDOW_REGISTER_KEY_NOTIFY_CALLBACK BreakRegisterdKeyCallback; VOID *RegisterdKeyCallbackContext; - EFI_KEY_STATE KeyState; - BOOLEAN LeftShift; - BOOLEAN RightShift; - BOOLEAN LeftAlt; - BOOLEAN RightAlt; - BOOLEAN LeftCtrl; - BOOLEAN RightCtrl; - BOOLEAN LeftLogo; - BOOLEAN RightLogo; - BOOLEAN Menu; - BOOLEAN SysReq; - BOOLEAN NumLock; - BOOLEAN ScrollLock; - BOOLEAN CapsLock; - BOOLEAN IsPartialKeySupport; - INT32 PointerPreviousX; - INT32 PointerPreviousY; - BOOLEAN PointerStateChanged; - EFI_SIMPLE_POINTER_STATE PointerState; + EFI_KEY_STATE KeyState; + BOOLEAN LeftShift; + BOOLEAN RightShift; + BOOLEAN LeftAlt; + BOOLEAN RightAlt; + BOOLEAN LeftCtrl; + BOOLEAN RightCtrl; + BOOLEAN LeftLogo; + BOOLEAN RightLogo; + BOOLEAN Menu; + BOOLEAN SysReq; + BOOLEAN NumLock; + BOOLEAN ScrollLock; + BOOLEAN CapsLock; + BOOLEAN IsPartialKeySupport; + INT32 PointerPreviousX; + INT32 PointerPreviousY; + BOOLEAN PointerStateChanged; + EFI_SIMPLE_POINTER_STATE PointerState; } GRAPHICS_PRIVATE_DATA; #define GRAPHICS_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('g', 'f', 'x', 'd') #define GRAPHICS_PRIVATE_DATA_FROM_THIS(a) \ CR(a, GRAPHICS_PRIVATE_DATA, GraphicsWindowIo, GRAPHICS_PRIVATE_DATA_SIGNATURE) - // // Gop Hardware abstraction internal worker functions // @@ -135,8 +132,8 @@ typedef struct { **/ EFI_STATUS GopPrivateAddKey ( - IN GRAPHICS_PRIVATE_DATA *Private, - IN EFI_INPUT_KEY Key + IN GRAPHICS_PRIVATE_DATA *Private, + IN EFI_INPUT_KEY Key ); EFI_STATUS @@ -149,29 +146,29 @@ WinNtWndGetKey ( EFI_STATUS EFIAPI WinNtWndCheckKey ( - IN EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsIo + IN EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsIo ); EFI_STATUS EFIAPI WinNtWndKeySetState ( - IN EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsIo, - IN EFI_KEY_TOGGLE_STATE *KeyToggleState + IN EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsIo, + IN EFI_KEY_TOGGLE_STATE *KeyToggleState ); EFI_STATUS EFIAPI WinNtWndRegisterKeyNotify ( - IN EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsIo, - IN EMU_GRAPHICS_WINDOW_REGISTER_KEY_NOTIFY_CALLBACK MakeCallBack, - IN EMU_GRAPHICS_WINDOW_REGISTER_KEY_NOTIFY_CALLBACK BreakCallBack, - IN VOID *Context + IN EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsIo, + IN EMU_GRAPHICS_WINDOW_REGISTER_KEY_NOTIFY_CALLBACK MakeCallBack, + IN EMU_GRAPHICS_WINDOW_REGISTER_KEY_NOTIFY_CALLBACK BreakCallBack, + IN VOID *Context ); EFI_STATUS EFIAPI WinNtWndCheckPointer ( - IN EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsIo + IN EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsIo ); EFI_STATUS @@ -180,13 +177,13 @@ WinNtWndGetPointerState ( IN EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsIo, IN EFI_SIMPLE_POINTER_STATE *State ); + EFI_STATUS GopPrivateCreateQ ( - IN GRAPHICS_PRIVATE_DATA *Private, - IN GOP_QUEUE_FIXED *Queue + IN GRAPHICS_PRIVATE_DATA *Private, + IN GOP_QUEUE_FIXED *Queue ); - /** TODO: Add function description @@ -197,8 +194,8 @@ GopPrivateCreateQ ( **/ EFI_STATUS GopPrivateDestroyQ ( - IN GRAPHICS_PRIVATE_DATA *Private, - IN GOP_QUEUE_FIXED *Queue + IN GRAPHICS_PRIVATE_DATA *Private, + IN GOP_QUEUE_FIXED *Queue ); -#endif +#endif diff --git a/EmulatorPkg/Win/Host/WinGopInput.c b/EmulatorPkg/Win/Host/WinGopInput.c index 6ae7aa4c37..1c67a1cb40 100644 --- a/EmulatorPkg/Win/Host/WinGopInput.c +++ b/EmulatorPkg/Win/Host/WinGopInput.c @@ -22,10 +22,8 @@ Abstract: **/ - #include "WinGop.h" - /** TODO: Add function description @@ -36,8 +34,8 @@ Abstract: **/ EFI_STATUS GopPrivateCreateQ ( - IN GRAPHICS_PRIVATE_DATA *Private, - IN GOP_QUEUE_FIXED *Queue + IN GRAPHICS_PRIVATE_DATA *Private, + IN GOP_QUEUE_FIXED *Queue ) { InitializeCriticalSection (&Queue->Cs); @@ -46,7 +44,6 @@ GopPrivateCreateQ ( return EFI_SUCCESS; } - /** TODO: Add function description @@ -57,8 +54,8 @@ GopPrivateCreateQ ( **/ EFI_STATUS GopPrivateDestroyQ ( - IN GRAPHICS_PRIVATE_DATA *Private, - IN GOP_QUEUE_FIXED *Queue + IN GRAPHICS_PRIVATE_DATA *Private, + IN GOP_QUEUE_FIXED *Queue ) { Queue->Front = 0; @@ -67,7 +64,6 @@ GopPrivateDestroyQ ( return EFI_SUCCESS; } - /** TODO: Add function description @@ -80,9 +76,9 @@ GopPrivateDestroyQ ( **/ EFI_STATUS GopPrivateAddQ ( - IN GRAPHICS_PRIVATE_DATA *Private, - IN GOP_QUEUE_FIXED *Queue, - IN EFI_KEY_DATA *KeyData + IN GRAPHICS_PRIVATE_DATA *Private, + IN GOP_QUEUE_FIXED *Queue, + IN EFI_KEY_DATA *KeyData ) { EnterCriticalSection (&Queue->Cs); @@ -93,13 +89,12 @@ GopPrivateAddQ ( } CopyMem (&Queue->Q[Queue->Rear], KeyData, sizeof (EFI_KEY_DATA)); - Queue->Rear = (Queue->Rear + 1) % MAX_Q; + Queue->Rear = (Queue->Rear + 1) % MAX_Q; LeaveCriticalSection (&Queue->Cs); return EFI_SUCCESS; } - /** TODO: Add function description @@ -112,9 +107,9 @@ GopPrivateAddQ ( **/ EFI_STATUS GopPrivateDeleteQ ( - IN GRAPHICS_PRIVATE_DATA *Private, - IN GOP_QUEUE_FIXED *Queue, - OUT EFI_KEY_DATA *Key + IN GRAPHICS_PRIVATE_DATA *Private, + IN GOP_QUEUE_FIXED *Queue, + OUT EFI_KEY_DATA *Key ) { EnterCriticalSection (&Queue->Cs); @@ -125,9 +120,9 @@ GopPrivateDeleteQ ( } CopyMem (Key, &Queue->Q[Queue->Front], sizeof (EFI_KEY_DATA)); - Queue->Front = (Queue->Front + 1) % MAX_Q; + Queue->Front = (Queue->Front + 1) % MAX_Q; - if (Key->Key.ScanCode == SCAN_NULL && Key->Key.UnicodeChar == CHAR_NULL) { + if ((Key->Key.ScanCode == SCAN_NULL) && (Key->Key.UnicodeChar == CHAR_NULL)) { if (!Private->IsPartialKeySupport) { // // If partial keystrok is not enabled, don't return the partial keystroke. @@ -137,11 +132,11 @@ GopPrivateDeleteQ ( return EFI_NOT_READY; } } + LeaveCriticalSection (&Queue->Cs); return EFI_SUCCESS; } - /** TODO: Add function description @@ -153,7 +148,7 @@ GopPrivateDeleteQ ( **/ EFI_STATUS GopPrivateCheckQ ( - IN GOP_QUEUE_FIXED *Queue + IN GOP_QUEUE_FIXED *Queue ) { if (Queue->Front == Queue->Rear) { @@ -171,8 +166,8 @@ GopPrivateCheckQ ( **/ VOID InitializeKeyState ( - IN GRAPHICS_PRIVATE_DATA *Private, - IN EFI_KEY_STATE *KeyState + IN GRAPHICS_PRIVATE_DATA *Private, + IN EFI_KEY_STATE *KeyState ) { KeyState->KeyShiftState = EFI_SHIFT_STATE_VALID; @@ -182,44 +177,57 @@ InitializeKeyState ( // Record Key shift state and toggle state // if (Private->LeftCtrl) { - KeyState->KeyShiftState |= EFI_LEFT_CONTROL_PRESSED; + KeyState->KeyShiftState |= EFI_LEFT_CONTROL_PRESSED; } + if (Private->RightCtrl) { - KeyState->KeyShiftState |= EFI_RIGHT_CONTROL_PRESSED; + KeyState->KeyShiftState |= EFI_RIGHT_CONTROL_PRESSED; } + if (Private->LeftAlt) { - KeyState->KeyShiftState |= EFI_LEFT_ALT_PRESSED; + KeyState->KeyShiftState |= EFI_LEFT_ALT_PRESSED; } + if (Private->RightAlt) { - KeyState->KeyShiftState |= EFI_RIGHT_ALT_PRESSED; + KeyState->KeyShiftState |= EFI_RIGHT_ALT_PRESSED; } + if (Private->LeftShift) { - KeyState->KeyShiftState |= EFI_LEFT_SHIFT_PRESSED; + KeyState->KeyShiftState |= EFI_LEFT_SHIFT_PRESSED; } + if (Private->RightShift) { - KeyState->KeyShiftState |= EFI_RIGHT_SHIFT_PRESSED; + KeyState->KeyShiftState |= EFI_RIGHT_SHIFT_PRESSED; } + if (Private->LeftLogo) { - KeyState->KeyShiftState |= EFI_LEFT_LOGO_PRESSED; + KeyState->KeyShiftState |= EFI_LEFT_LOGO_PRESSED; } + if (Private->RightLogo) { - KeyState->KeyShiftState |= EFI_RIGHT_LOGO_PRESSED; + KeyState->KeyShiftState |= EFI_RIGHT_LOGO_PRESSED; } + if (Private->Menu) { - KeyState->KeyShiftState |= EFI_MENU_KEY_PRESSED; + KeyState->KeyShiftState |= EFI_MENU_KEY_PRESSED; } + if (Private->SysReq) { - KeyState->KeyShiftState |= EFI_SYS_REQ_PRESSED; + KeyState->KeyShiftState |= EFI_SYS_REQ_PRESSED; } + if (Private->CapsLock) { KeyState->KeyToggleState |= EFI_CAPS_LOCK_ACTIVE; } + if (Private->NumLock) { KeyState->KeyToggleState |= EFI_NUM_LOCK_ACTIVE; } + if (Private->ScrollLock) { KeyState->KeyToggleState |= EFI_SCROLL_LOCK_ACTIVE; } + if (Private->IsPartialKeySupport) { KeyState->KeyToggleState |= EFI_KEY_STATE_EXPOSED; } @@ -241,7 +249,7 @@ GopPrivateAddKey ( IN EFI_INPUT_KEY Key ) { - EFI_KEY_DATA KeyData; + EFI_KEY_DATA KeyData; KeyData.Key = Key; InitializeKeyState (Private, &KeyData.KeyState); @@ -251,7 +259,8 @@ GopPrivateAddKey ( // if ((Private->LeftCtrl || Private->RightCtrl) && (KeyData.Key.UnicodeChar >= 1) && (KeyData.Key.UnicodeChar <= 26) - ) { + ) + { if ((Private->LeftShift || Private->RightShift) == Private->CapsLock) { KeyData.Key.UnicodeChar = (CHAR16)(KeyData.Key.UnicodeChar + L'a' - 1); } else { @@ -264,7 +273,8 @@ GopPrivateAddKey ( // if (((KeyData.Key.UnicodeChar >= L'a') && (KeyData.Key.UnicodeChar <= L'z')) || ((KeyData.Key.UnicodeChar >= L'A') && (KeyData.Key.UnicodeChar <= L'Z')) - ) { + ) + { KeyData.KeyState.KeyShiftState &= ~(EFI_LEFT_SHIFT_PRESSED | EFI_RIGHT_SHIFT_PRESSED); } @@ -276,26 +286,26 @@ GopPrivateAddKey ( return EFI_SUCCESS; } - EFI_STATUS EFIAPI WinNtWndCheckKey ( - IN EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsIo + IN EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsIo ) { - GRAPHICS_PRIVATE_DATA *Private; + GRAPHICS_PRIVATE_DATA *Private; Private = GRAPHICS_PRIVATE_DATA_FROM_THIS (GraphicsIo); return GopPrivateCheckQ (&Private->QueueForRead); - } + EFI_STATUS EFIAPI WinNtWndGetKey ( IN EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsIo, IN EFI_KEY_DATA *KeyData ) + /*++ Routine Description: @@ -316,15 +326,15 @@ WinNtWndGetKey ( --*/ { - EFI_STATUS Status; - GRAPHICS_PRIVATE_DATA *Private; + EFI_STATUS Status; + GRAPHICS_PRIVATE_DATA *Private; Private = GRAPHICS_PRIVATE_DATA_FROM_THIS (GraphicsIo); ZeroMem (&KeyData->Key, sizeof (KeyData->Key)); InitializeKeyState (Private, &KeyData->KeyState); - Status = GopPrivateCheckQ (&Private->QueueForRead); + Status = GopPrivateCheckQ (&Private->QueueForRead); if (!EFI_ERROR (Status)) { // // If a Key press exists try and read it. @@ -336,7 +346,7 @@ WinNtWndGetKey ( // EFI_NOT_READY. // if (!Private->IsPartialKeySupport) { - if (KeyData->Key.ScanCode == SCAN_NULL && KeyData->Key.UnicodeChar == CHAR_NULL) { + if ((KeyData->Key.ScanCode == SCAN_NULL) && (KeyData->Key.UnicodeChar == CHAR_NULL)) { Status = EFI_NOT_READY; } } @@ -344,51 +354,53 @@ WinNtWndGetKey ( } return Status; - } EFI_STATUS EFIAPI WinNtWndKeySetState ( - IN EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsIo, - IN EFI_KEY_TOGGLE_STATE *KeyToggleState + IN EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsIo, + IN EFI_KEY_TOGGLE_STATE *KeyToggleState ) { - GRAPHICS_PRIVATE_DATA *Private; + GRAPHICS_PRIVATE_DATA *Private; - Private = GRAPHICS_PRIVATE_DATA_FROM_THIS (GraphicsIo); - Private->ScrollLock = FALSE; - Private->NumLock = FALSE; - Private->CapsLock = FALSE; + Private = GRAPHICS_PRIVATE_DATA_FROM_THIS (GraphicsIo); + Private->ScrollLock = FALSE; + Private->NumLock = FALSE; + Private->CapsLock = FALSE; Private->IsPartialKeySupport = FALSE; if ((*KeyToggleState & EFI_SCROLL_LOCK_ACTIVE) == EFI_SCROLL_LOCK_ACTIVE) { Private->ScrollLock = TRUE; } + if ((*KeyToggleState & EFI_NUM_LOCK_ACTIVE) == EFI_NUM_LOCK_ACTIVE) { Private->NumLock = TRUE; } + if ((*KeyToggleState & EFI_CAPS_LOCK_ACTIVE) == EFI_CAPS_LOCK_ACTIVE) { Private->CapsLock = TRUE; } + if ((*KeyToggleState & EFI_KEY_STATE_EXPOSED) == EFI_KEY_STATE_EXPOSED) { Private->IsPartialKeySupport = TRUE; } + Private->KeyState.KeyToggleState = *KeyToggleState; return EFI_SUCCESS; } - EFI_STATUS EFIAPI WinNtWndRegisterKeyNotify ( - IN EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsIo, - IN EMU_GRAPHICS_WINDOW_REGISTER_KEY_NOTIFY_CALLBACK MakeCallBack, - IN EMU_GRAPHICS_WINDOW_REGISTER_KEY_NOTIFY_CALLBACK BreakCallBack, - IN VOID *Context + IN EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsIo, + IN EMU_GRAPHICS_WINDOW_REGISTER_KEY_NOTIFY_CALLBACK MakeCallBack, + IN EMU_GRAPHICS_WINDOW_REGISTER_KEY_NOTIFY_CALLBACK BreakCallBack, + IN VOID *Context ) { - GRAPHICS_PRIVATE_DATA *Private; + GRAPHICS_PRIVATE_DATA *Private; Private = GRAPHICS_PRIVATE_DATA_FROM_THIS (GraphicsIo); @@ -402,10 +414,10 @@ WinNtWndRegisterKeyNotify ( EFI_STATUS EFIAPI WinNtWndCheckPointer ( - IN EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsIo + IN EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsIo ) { - GRAPHICS_PRIVATE_DATA *Private; + GRAPHICS_PRIVATE_DATA *Private; Private = GRAPHICS_PRIVATE_DATA_FROM_THIS (GraphicsIo); @@ -423,7 +435,7 @@ WinNtWndGetPointerState ( IN EFI_SIMPLE_POINTER_STATE *State ) { - GRAPHICS_PRIVATE_DATA *Private; + GRAPHICS_PRIVATE_DATA *Private; Private = GRAPHICS_PRIVATE_DATA_FROM_THIS (GraphicsIo); diff --git a/EmulatorPkg/Win/Host/WinGopScreen.c b/EmulatorPkg/Win/Host/WinGopScreen.c index 74011e225e..661573d777 100644 --- a/EmulatorPkg/Win/Host/WinGopScreen.c +++ b/EmulatorPkg/Win/Host/WinGopScreen.c @@ -18,8 +18,8 @@ Abstract: #include "WinGop.h" -DWORD mTlsIndex = TLS_OUT_OF_INDEXES; -DWORD mTlsIndexUseCount = 0; // lets us know when we can free mTlsIndex. +DWORD mTlsIndex = TLS_OUT_OF_INDEXES; +DWORD mTlsIndexUseCount = 0; // lets us know when we can free mTlsIndex. BOOLEAN WinNtGopConvertParamToEfiKeyShiftState ( @@ -30,75 +30,78 @@ WinNtGopConvertParamToEfiKeyShiftState ( ) { switch (*wParam) { - // - // BUGBUG: Only GetAsyncKeyState() and GetKeyState() can distinguish - // left and right Ctrl, and Shift key. - // Neither of the two is defined in EFI_WIN_NT_THUNK_PROTOCOL. - // Therefor, we can not set the correct Shift state here. - // - case VK_SHIFT: - if ((*lParam & GOP_EXTENDED_KEY) == GOP_EXTENDED_KEY) { + // + // BUGBUG: Only GetAsyncKeyState() and GetKeyState() can distinguish + // left and right Ctrl, and Shift key. + // Neither of the two is defined in EFI_WIN_NT_THUNK_PROTOCOL. + // Therefor, we can not set the correct Shift state here. + // + case VK_SHIFT: + if ((*lParam & GOP_EXTENDED_KEY) == GOP_EXTENDED_KEY) { Private->RightShift = Flag; } else { Private->LeftShift = Flag; } - return TRUE; - case VK_LSHIFT: - Private->LeftShift = Flag; - return TRUE; + return TRUE; - case VK_RSHIFT: - Private->RightShift = Flag; - return TRUE; + case VK_LSHIFT: + Private->LeftShift = Flag; + return TRUE; - case VK_CONTROL: - if ((*lParam & GOP_EXTENDED_KEY) == GOP_EXTENDED_KEY) { - Private->RightCtrl= Flag; + case VK_RSHIFT: + Private->RightShift = Flag; + return TRUE; + + case VK_CONTROL: + if ((*lParam & GOP_EXTENDED_KEY) == GOP_EXTENDED_KEY) { + Private->RightCtrl = Flag; } else { Private->LeftCtrl = Flag; } - return TRUE; - case VK_LCONTROL: - Private->LeftCtrl = Flag; - return TRUE; + return TRUE; - case VK_RCONTROL: - Private->RightCtrl = Flag; - return TRUE; + case VK_LCONTROL: + Private->LeftCtrl = Flag; + return TRUE; - case VK_LWIN: - Private->LeftLogo = Flag; - return TRUE; + case VK_RCONTROL: + Private->RightCtrl = Flag; + return TRUE; - case VK_RWIN: - Private->RightLogo = Flag; - return TRUE; + case VK_LWIN: + Private->LeftLogo = Flag; + return TRUE; - case VK_APPS: - Private->Menu = Flag; - return TRUE; - // - // BUGBUG: PrintScreen/SysRq can not trigger WM_KEYDOWN message, - // so SySReq shift state is not supported here. - // - case VK_PRINT: - Private->SysReq = Flag; - return TRUE; - // - // For Alt Keystroke. - // - case VK_MENU: - if ((*lParam & GOP_EXTENDED_KEY) == GOP_EXTENDED_KEY) { + case VK_RWIN: + Private->RightLogo = Flag; + return TRUE; + + case VK_APPS: + Private->Menu = Flag; + return TRUE; + // + // BUGBUG: PrintScreen/SysRq can not trigger WM_KEYDOWN message, + // so SySReq shift state is not supported here. + // + case VK_PRINT: + Private->SysReq = Flag; + return TRUE; + // + // For Alt Keystroke. + // + case VK_MENU: + if ((*lParam & GOP_EXTENDED_KEY) == GOP_EXTENDED_KEY) { Private->RightAlt = Flag; } else { Private->LeftAlt = Flag; } - return TRUE; - default: - return FALSE; + return TRUE; + + default: + return FALSE; } } @@ -110,68 +113,138 @@ WinNtGopConvertParamToEfiKey ( IN EFI_INPUT_KEY *Key ) { - BOOLEAN Flag; + BOOLEAN Flag; + Flag = FALSE; switch (*wParam) { - case VK_HOME: Key->ScanCode = SCAN_HOME; Flag = TRUE; break; - case VK_END: Key->ScanCode = SCAN_END; Flag = TRUE; break; - case VK_LEFT: Key->ScanCode = SCAN_LEFT; Flag = TRUE; break; - case VK_RIGHT: Key->ScanCode = SCAN_RIGHT; Flag = TRUE; break; - case VK_UP: Key->ScanCode = SCAN_UP; Flag = TRUE; break; - case VK_DOWN: Key->ScanCode = SCAN_DOWN; Flag = TRUE; break; - case VK_DELETE: Key->ScanCode = SCAN_DELETE; Flag = TRUE; break; - case VK_INSERT: Key->ScanCode = SCAN_INSERT; Flag = TRUE; break; - case VK_PRIOR: Key->ScanCode = SCAN_PAGE_UP; Flag = TRUE; break; - case VK_NEXT: Key->ScanCode = SCAN_PAGE_DOWN; Flag = TRUE; break; - case VK_ESCAPE: Key->ScanCode = SCAN_ESC; Flag = TRUE; break; - - case VK_F1: Key->ScanCode = SCAN_F1; Flag = TRUE; break; - case VK_F2: Key->ScanCode = SCAN_F2; Flag = TRUE; break; - case VK_F3: Key->ScanCode = SCAN_F3; Flag = TRUE; break; - case VK_F4: Key->ScanCode = SCAN_F4; Flag = TRUE; break; - case VK_F5: Key->ScanCode = SCAN_F5; Flag = TRUE; break; - case VK_F6: Key->ScanCode = SCAN_F6; Flag = TRUE; break; - case VK_F7: Key->ScanCode = SCAN_F7; Flag = TRUE; break; - case VK_F8: Key->ScanCode = SCAN_F8; Flag = TRUE; break; - case VK_F9: Key->ScanCode = SCAN_F9; Flag = TRUE; break; - case VK_F11: Key->ScanCode = SCAN_F11; Flag = TRUE; break; - case VK_F12: Key->ScanCode = SCAN_F12; Flag = TRUE; break; - - case VK_F13: Key->ScanCode = SCAN_F13; Flag = TRUE; break; - case VK_F14: Key->ScanCode = SCAN_F14; Flag = TRUE; break; - case VK_F15: Key->ScanCode = SCAN_F15; Flag = TRUE; break; - case VK_F16: Key->ScanCode = SCAN_F16; Flag = TRUE; break; - case VK_F17: Key->ScanCode = SCAN_F17; Flag = TRUE; break; - case VK_F18: Key->ScanCode = SCAN_F18; Flag = TRUE; break; - case VK_F19: Key->ScanCode = SCAN_F19; Flag = TRUE; break; - case VK_F20: Key->ScanCode = SCAN_F20; Flag = TRUE; break; - case VK_F21: Key->ScanCode = SCAN_F21; Flag = TRUE; break; - case VK_F22: Key->ScanCode = SCAN_F22; Flag = TRUE; break; - case VK_F23: Key->ScanCode = SCAN_F23; Flag = TRUE; break; - case VK_F24: Key->ScanCode = SCAN_F24; Flag = TRUE; break; - case VK_PAUSE: Key->ScanCode = SCAN_PAUSE; Flag = TRUE; break; - - // - // Set toggle state - // - case VK_NUMLOCK: - Private->NumLock = (BOOLEAN)(!Private->NumLock); - Flag = TRUE; - break; - case VK_SCROLL: - Private->ScrollLock = (BOOLEAN)(!Private->ScrollLock); - Flag = TRUE; - break; - case VK_CAPITAL: - Private->CapsLock = (BOOLEAN)(!Private->CapsLock); - Flag = TRUE; - break; + case VK_HOME: Key->ScanCode = SCAN_HOME; + Flag = TRUE; + break; + case VK_END: Key->ScanCode = SCAN_END; + Flag = TRUE; + break; + case VK_LEFT: Key->ScanCode = SCAN_LEFT; + Flag = TRUE; + break; + case VK_RIGHT: Key->ScanCode = SCAN_RIGHT; + Flag = TRUE; + break; + case VK_UP: Key->ScanCode = SCAN_UP; + Flag = TRUE; + break; + case VK_DOWN: Key->ScanCode = SCAN_DOWN; + Flag = TRUE; + break; + case VK_DELETE: Key->ScanCode = SCAN_DELETE; + Flag = TRUE; + break; + case VK_INSERT: Key->ScanCode = SCAN_INSERT; + Flag = TRUE; + break; + case VK_PRIOR: Key->ScanCode = SCAN_PAGE_UP; + Flag = TRUE; + break; + case VK_NEXT: Key->ScanCode = SCAN_PAGE_DOWN; + Flag = TRUE; + break; + case VK_ESCAPE: Key->ScanCode = SCAN_ESC; + Flag = TRUE; + break; + + case VK_F1: Key->ScanCode = SCAN_F1; + Flag = TRUE; + break; + case VK_F2: Key->ScanCode = SCAN_F2; + Flag = TRUE; + break; + case VK_F3: Key->ScanCode = SCAN_F3; + Flag = TRUE; + break; + case VK_F4: Key->ScanCode = SCAN_F4; + Flag = TRUE; + break; + case VK_F5: Key->ScanCode = SCAN_F5; + Flag = TRUE; + break; + case VK_F6: Key->ScanCode = SCAN_F6; + Flag = TRUE; + break; + case VK_F7: Key->ScanCode = SCAN_F7; + Flag = TRUE; + break; + case VK_F8: Key->ScanCode = SCAN_F8; + Flag = TRUE; + break; + case VK_F9: Key->ScanCode = SCAN_F9; + Flag = TRUE; + break; + case VK_F11: Key->ScanCode = SCAN_F11; + Flag = TRUE; + break; + case VK_F12: Key->ScanCode = SCAN_F12; + Flag = TRUE; + break; + + case VK_F13: Key->ScanCode = SCAN_F13; + Flag = TRUE; + break; + case VK_F14: Key->ScanCode = SCAN_F14; + Flag = TRUE; + break; + case VK_F15: Key->ScanCode = SCAN_F15; + Flag = TRUE; + break; + case VK_F16: Key->ScanCode = SCAN_F16; + Flag = TRUE; + break; + case VK_F17: Key->ScanCode = SCAN_F17; + Flag = TRUE; + break; + case VK_F18: Key->ScanCode = SCAN_F18; + Flag = TRUE; + break; + case VK_F19: Key->ScanCode = SCAN_F19; + Flag = TRUE; + break; + case VK_F20: Key->ScanCode = SCAN_F20; + Flag = TRUE; + break; + case VK_F21: Key->ScanCode = SCAN_F21; + Flag = TRUE; + break; + case VK_F22: Key->ScanCode = SCAN_F22; + Flag = TRUE; + break; + case VK_F23: Key->ScanCode = SCAN_F23; + Flag = TRUE; + break; + case VK_F24: Key->ScanCode = SCAN_F24; + Flag = TRUE; + break; + case VK_PAUSE: Key->ScanCode = SCAN_PAUSE; + Flag = TRUE; + break; + + // + // Set toggle state + // + case VK_NUMLOCK: + Private->NumLock = (BOOLEAN)(!Private->NumLock); + Flag = TRUE; + break; + case VK_SCROLL: + Private->ScrollLock = (BOOLEAN)(!Private->ScrollLock); + Flag = TRUE; + break; + case VK_CAPITAL: + Private->CapsLock = (BOOLEAN)(!Private->CapsLock); + Flag = TRUE; + break; } return (WinNtGopConvertParamToEfiKeyShiftState (Private, wParam, lParam, TRUE)) == TRUE ? TRUE : Flag; } - // // GOP Protocol Member Functions // @@ -185,15 +258,15 @@ WinNtWndSize ( IN EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsIo, IN UINT32 Width, IN UINT32 Height -) + ) { - RETURN_STATUS RStatus; - EFI_GRAPHICS_OUTPUT_MODE_INFORMATION Info; - GRAPHICS_PRIVATE_DATA *Private; - RECT Rect; - BITMAPV4HEADER *VirtualScreenInfo; - FRAME_BUFFER_CONFIGURE *FrameBufferConfigure; - UINTN FrameBufferConfigureSize; + RETURN_STATUS RStatus; + EFI_GRAPHICS_OUTPUT_MODE_INFORMATION Info; + GRAPHICS_PRIVATE_DATA *Private; + RECT Rect; + BITMAPV4HEADER *VirtualScreenInfo; + FRAME_BUFFER_CONFIGURE *FrameBufferConfigure; + UINTN FrameBufferConfigureSize; Private = GRAPHICS_PRIVATE_DATA_FROM_THIS (GraphicsIo); @@ -202,10 +275,10 @@ WinNtWndSize ( // This buffer is the virtual screen/frame buffer. // VirtualScreenInfo = HeapAlloc ( - GetProcessHeap (), - HEAP_ZERO_MEMORY, - Width * Height * sizeof (RGBQUAD) + sizeof (BITMAPV4HEADER) - ); + GetProcessHeap (), + HEAP_ZERO_MEMORY, + Width * Height * sizeof (RGBQUAD) + sizeof (BITMAPV4HEADER) + ); if (VirtualScreenInfo == NULL) { return EFI_OUT_OF_RESOURCES; } @@ -214,10 +287,10 @@ WinNtWndSize ( // Update the virtual screen info data structure // Use negative Height to make sure screen/buffer are using the same coordinate. // - VirtualScreenInfo->bV4Size = sizeof (BITMAPV4HEADER); - VirtualScreenInfo->bV4Width = Width; - VirtualScreenInfo->bV4Height = -(LONG)Height; - VirtualScreenInfo->bV4Planes = 1; + VirtualScreenInfo->bV4Size = sizeof (BITMAPV4HEADER); + VirtualScreenInfo->bV4Width = Width; + VirtualScreenInfo->bV4Height = -(LONG)Height; + VirtualScreenInfo->bV4Planes = 1; VirtualScreenInfo->bV4BitCount = 32; // // uncompressed @@ -229,20 +302,21 @@ WinNtWndSize ( Info.PixelFormat = PixelBlueGreenRedReserved8BitPerColor; Info.PixelsPerScanLine = Width; FrameBufferConfigureSize = 0; - RStatus = FrameBufferBltConfigure (VirtualScreenInfo + 1, &Info, NULL, &FrameBufferConfigureSize); + RStatus = FrameBufferBltConfigure (VirtualScreenInfo + 1, &Info, NULL, &FrameBufferConfigureSize); ASSERT (RStatus == EFI_BUFFER_TOO_SMALL); FrameBufferConfigure = AllocatePool (FrameBufferConfigureSize); if (FrameBufferConfigure == NULL) { HeapFree (GetProcessHeap (), 0, VirtualScreenInfo); return EFI_OUT_OF_RESOURCES; } + RStatus = FrameBufferBltConfigure (VirtualScreenInfo + 1, &Info, FrameBufferConfigure, &FrameBufferConfigureSize); ASSERT_RETURN_ERROR (RStatus); - if (Private->FrameBufferConfigure != NULL) { FreePool (Private->FrameBufferConfigure); } + Private->FrameBufferConfigure = FrameBufferConfigure; // @@ -253,6 +327,7 @@ WinNtWndSize ( if (Private->VirtualScreenInfo != NULL) { HeapFree (GetProcessHeap (), 0, Private->VirtualScreenInfo); } + Private->VirtualScreenInfo = VirtualScreenInfo; Private->Width = Width; @@ -321,24 +396,27 @@ WinNtWndSize ( // TODO: Delta - add argument and description to function comment EFI_STATUS WinNtWndBlt ( - IN EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsIo, - IN EFI_UGA_PIXEL *BltBuffer OPTIONAL, - IN EFI_UGA_BLT_OPERATION BltOperation, - IN EMU_GRAPHICS_WINDOWS__BLT_ARGS *Args -) + IN EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsIo, + IN EFI_UGA_PIXEL *BltBuffer OPTIONAL, + IN EFI_UGA_BLT_OPERATION BltOperation, + IN EMU_GRAPHICS_WINDOWS__BLT_ARGS *Args + ) { - RETURN_STATUS RStatus; - GRAPHICS_PRIVATE_DATA *Private; - RECT Rect; + RETURN_STATUS RStatus; + GRAPHICS_PRIVATE_DATA *Private; + RECT Rect; Private = GRAPHICS_PRIVATE_DATA_FROM_THIS (GraphicsIo); RStatus = FrameBufferBlt ( Private->FrameBufferConfigure, BltBuffer, BltOperation, - Args->SourceX, Args->SourceY, - Args->DestinationX, Args->DestinationY, - Args->Width, Args->Height, + Args->SourceX, + Args->SourceY, + Args->DestinationX, + Args->DestinationY, + Args->Width, + Args->Height, Args->Delta ); if (RETURN_ERROR (RStatus)) { @@ -370,8 +448,6 @@ WinNtWndBlt ( return EFI_SUCCESS; } - - /** Win32 Windows event handler. @@ -393,14 +469,14 @@ WinNtGopThreadWindowProc ( IN LPARAM lParam ) { - GRAPHICS_PRIVATE_DATA *Private; - HDC Handle; - PAINTSTRUCT PaintStruct; - LPARAM Index; - EFI_INPUT_KEY Key; - BOOLEAN AltIsPress; - INT32 PosX; - INT32 PosY; + GRAPHICS_PRIVATE_DATA *Private; + HDC Handle; + PAINTSTRUCT PaintStruct; + LPARAM Index; + EFI_INPUT_KEY Key; + BOOLEAN AltIsPress; + INT32 PosX; + INT32 PosY; // // Use mTlsIndex global to get a Thread Local Storage version of Private. @@ -408,190 +484,195 @@ WinNtGopThreadWindowProc ( // a unique thread. // AltIsPress = FALSE; - Private = TlsGetValue (mTlsIndex); + Private = TlsGetValue (mTlsIndex); ASSERT (NULL != Private); switch (iMsg) { - case WM_PAINT: - Handle = BeginPaint (hwnd, &PaintStruct); - - SetDIBitsToDevice ( - Handle, // Destination Device Context - 0, // Destination X - 0 - 0, // Destination Y - 0 - Private->Width, // Width - Private->Height, // Height - 0, // Source X - 0, // Source Y - 0, // DIB Start Scan Line - Private->Height, // Number of scan lines - Private->VirtualScreenInfo + 1, // Address of array of DIB bits - (BITMAPINFO *) Private->VirtualScreenInfo, // Address of structure with bitmap info - DIB_RGB_COLORS // RGB or palette indexes - ); - - EndPaint (hwnd, &PaintStruct); - return 0; - - // - // F10 and the ALT key do not create a WM_KEYDOWN message, thus this special case - // WM_SYSKEYDOWN is posted when F10 is pressed or - // holds down ALT key and then presses another key. - // - case WM_SYSKEYDOWN: - - Key.ScanCode = 0; - Key.UnicodeChar = CHAR_NULL; - switch (wParam) { - case VK_F10: - Key.ScanCode = SCAN_F10; - Key.UnicodeChar = CHAR_NULL; - GopPrivateAddKey (Private, Key); + case WM_PAINT: + Handle = BeginPaint (hwnd, &PaintStruct); + + SetDIBitsToDevice ( + Handle, // Destination Device Context + 0, // Destination X - 0 + 0, // Destination Y - 0 + Private->Width, // Width + Private->Height, // Height + 0, // Source X + 0, // Source Y + 0, // DIB Start Scan Line + Private->Height, // Number of scan lines + Private->VirtualScreenInfo + 1, // Address of array of DIB bits + (BITMAPINFO *)Private->VirtualScreenInfo, // Address of structure with bitmap info + DIB_RGB_COLORS // RGB or palette indexes + ); + + EndPaint (hwnd, &PaintStruct); return 0; - } // - // If ALT or ALT + modifier key is pressed. + // F10 and the ALT key do not create a WM_KEYDOWN message, thus this special case + // WM_SYSKEYDOWN is posted when F10 is pressed or + // holds down ALT key and then presses another key. // - if (WinNtGopConvertParamToEfiKey (Private, &wParam, &lParam, &Key)) { - if (Key.ScanCode != 0){ + case WM_SYSKEYDOWN: + + Key.ScanCode = 0; + Key.UnicodeChar = CHAR_NULL; + switch (wParam) { + case VK_F10: + Key.ScanCode = SCAN_F10; + Key.UnicodeChar = CHAR_NULL; + GopPrivateAddKey (Private, Key); + return 0; + } + + // + // If ALT or ALT + modifier key is pressed. + // + if (WinNtGopConvertParamToEfiKey (Private, &wParam, &lParam, &Key)) { + if (Key.ScanCode != 0) { + // + // If ALT is pressed with other ScanCode. + // Always revers the left Alt for simple. + // + Private->LeftAlt = TRUE; + } + + GopPrivateAddKey (Private, Key); // - // If ALT is pressed with other ScanCode. - // Always revers the left Alt for simple. + // When Alt is released there is no windoes message, so + // clean it after using it. // - Private->LeftAlt = TRUE; + Private->RightAlt = FALSE; + Private->LeftAlt = FALSE; + return 0; } - GopPrivateAddKey (Private, Key); + + AltIsPress = TRUE; + + case WM_CHAR: // - // When Alt is released there is no windoes message, so - // clean it after using it. + // The ESC key also generate WM_CHAR. // - Private->RightAlt = FALSE; - Private->LeftAlt = FALSE; + if (wParam == 0x1B) { + return 0; + } + + if (AltIsPress == TRUE) { + // + // If AltIsPress is true that means the Alt key is pressed. + // + Private->LeftAlt = TRUE; + } + + for (Index = 0; Index < (lParam & 0xffff); Index++) { + if (wParam != 0) { + Key.UnicodeChar = (CHAR16)wParam; + Key.ScanCode = SCAN_NULL; + GopPrivateAddKey (Private, Key); + } + } + + if (AltIsPress == TRUE) { + // + // When Alt is released there is no windoes message, so + // clean it after using it. + // + Private->LeftAlt = FALSE; + Private->RightAlt = FALSE; + } + return 0; - } - AltIsPress = TRUE; - case WM_CHAR: - // - // The ESC key also generate WM_CHAR. - // - if (wParam == 0x1B) { + case WM_SYSKEYUP: + // + // ALT is pressed with another key released + // + WinNtGopConvertParamToEfiKeyShiftState (Private, &wParam, &lParam, FALSE); return 0; - } - if (AltIsPress == TRUE) { + case WM_KEYDOWN: + Key.ScanCode = SCAN_NULL; + Key.UnicodeChar = CHAR_NULL; // - // If AltIsPress is true that means the Alt key is pressed. + // A value key press will cause a WM_KEYDOWN first, then cause a WM_CHAR + // So if there is no modifier key updated, skip the WM_KEYDOWN even. // - Private->LeftAlt = TRUE; - } - for (Index = 0; Index < (lParam & 0xffff); Index++) { - if (wParam != 0) { - Key.UnicodeChar = (CHAR16) wParam; - Key.ScanCode = SCAN_NULL; + if (WinNtGopConvertParamToEfiKey (Private, &wParam, &lParam, &Key)) { + // + // Support the partial keystroke, add all keydown event into the queue. + // GopPrivateAddKey (Private, Key); } - } - if (AltIsPress == TRUE) { - // - // When Alt is released there is no windoes message, so - // clean it after using it. - // - Private->LeftAlt = FALSE; - Private->RightAlt = FALSE; - } - return 0; - case WM_SYSKEYUP: - // - // ALT is pressed with another key released - // - WinNtGopConvertParamToEfiKeyShiftState (Private, &wParam, &lParam, FALSE); - return 0; + return 0; - case WM_KEYDOWN: - Key.ScanCode = SCAN_NULL; - Key.UnicodeChar = CHAR_NULL; - // - // A value key press will cause a WM_KEYDOWN first, then cause a WM_CHAR - // So if there is no modifier key updated, skip the WM_KEYDOWN even. - // - if (WinNtGopConvertParamToEfiKey (Private, &wParam, &lParam, &Key)) { + case WM_KEYUP: + WinNtGopConvertParamToEfiKeyShiftState (Private, &wParam, &lParam, FALSE); + return 0; + + case WM_MOUSEMOVE: + PosX = GET_X_LPARAM (lParam); + PosY = GET_Y_LPARAM (lParam); + + if (Private->PointerPreviousX != PosX) { + Private->PointerState.RelativeMovementX += (PosX - Private->PointerPreviousX); + Private->PointerPreviousX = PosX; + Private->PointerStateChanged = TRUE; + } + + if (Private->PointerPreviousY != PosY) { + Private->PointerState.RelativeMovementY += (PosY - Private->PointerPreviousY); + Private->PointerPreviousY = PosY; + Private->PointerStateChanged = TRUE; + } + + Private->PointerState.RelativeMovementZ = 0; + return 0; + + case WM_LBUTTONDOWN: + Private->PointerState.LeftButton = TRUE; + Private->PointerStateChanged = TRUE; + return 0; + + case WM_LBUTTONUP: + Private->PointerState.LeftButton = FALSE; + Private->PointerStateChanged = TRUE; + return 0; + + case WM_RBUTTONDOWN: + Private->PointerState.RightButton = TRUE; + Private->PointerStateChanged = TRUE; + return 0; + + case WM_RBUTTONUP: + Private->PointerState.RightButton = FALSE; + Private->PointerStateChanged = TRUE; + return 0; + + case WM_CLOSE: // - // Support the partial keystroke, add all keydown event into the queue. + // This close message is issued by user, core is not aware of this, + // so don't release the window display resource, just hide the window. // - GopPrivateAddKey (Private, Key); - } - return 0; - - case WM_KEYUP: - WinNtGopConvertParamToEfiKeyShiftState (Private, &wParam, &lParam, FALSE); - return 0; - - case WM_MOUSEMOVE: - PosX = GET_X_LPARAM (lParam); - PosY = GET_Y_LPARAM (lParam); - - if (Private->PointerPreviousX != PosX) { - Private->PointerState.RelativeMovementX += (PosX - Private->PointerPreviousX); - Private->PointerPreviousX = PosX; - Private->PointerStateChanged = TRUE; - } - - if (Private->PointerPreviousY != PosY) { - Private->PointerState.RelativeMovementY += (PosY - Private->PointerPreviousY); - Private->PointerPreviousY = PosY; - Private->PointerStateChanged = TRUE; - } - - Private->PointerState.RelativeMovementZ = 0; - return 0; - - case WM_LBUTTONDOWN: - Private->PointerState.LeftButton = TRUE; - Private->PointerStateChanged = TRUE; - return 0; - - case WM_LBUTTONUP: - Private->PointerState.LeftButton = FALSE; - Private->PointerStateChanged = TRUE; - return 0; - - case WM_RBUTTONDOWN: - Private->PointerState.RightButton = TRUE; - Private->PointerStateChanged = TRUE; - return 0; - - case WM_RBUTTONUP: - Private->PointerState.RightButton = FALSE; - Private->PointerStateChanged = TRUE; - return 0; - - case WM_CLOSE: - // - // This close message is issued by user, core is not aware of this, - // so don't release the window display resource, just hide the window. - // - ShowWindow (Private->WindowHandle, SW_HIDE); - return 0; + ShowWindow (Private->WindowHandle, SW_HIDE); + return 0; - case WM_DESTROY: - DestroyWindow (hwnd); - PostQuitMessage (0); + case WM_DESTROY: + DestroyWindow (hwnd); + PostQuitMessage (0); - HeapFree (GetProcessHeap (), 0, Private->VirtualScreenInfo); + HeapFree (GetProcessHeap (), 0, Private->VirtualScreenInfo); - ExitThread (0); + ExitThread (0); - default: - break; - }; + default: + break; + } return DefWindowProc (hwnd, iMsg, wParam, lParam); } - /** This thread simulates the end of WinMain () application. Each Window needs to process its events. The messages are dispatched to @@ -607,14 +688,14 @@ WinNtGopThreadWindowProc ( DWORD WINAPI WinNtGopThreadWinMain ( - LPVOID lpParameter + LPVOID lpParameter ) { MSG Message; GRAPHICS_PRIVATE_DATA *Private; RECT Rect; - Private = (GRAPHICS_PRIVATE_DATA *) lpParameter; + Private = (GRAPHICS_PRIVATE_DATA *)lpParameter; ASSERT (NULL != Private); // @@ -624,7 +705,7 @@ WinNtGopThreadWinMain ( // TlsSetValue (mTlsIndex, Private); - Private->ThreadId = GetCurrentThreadId (); + Private->ThreadId = GetCurrentThreadId (); Private->WindowsClass.cbSize = sizeof (WNDCLASSEX); Private->WindowsClass.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC; @@ -645,7 +726,6 @@ WinNtGopThreadWinMain ( Private->Width = 100; Private->Height = 100; - // // This call will fail after the first time, but thats O.K. since we only need // WIN_NT_GOP_CLASS_NAME to exist to create the window. @@ -703,7 +783,6 @@ WinNtGopThreadWinMain ( return (DWORD)Message.wParam; } - /** TODO: Add function description @@ -719,11 +798,11 @@ WinNtGopThreadWinMain ( EFI_STATUS EFIAPI WinNtGraphicsWindowOpen ( - IN EMU_IO_THUNK_PROTOCOL *This + IN EMU_IO_THUNK_PROTOCOL *This ) { - DWORD NewThreadId; - GRAPHICS_PRIVATE_DATA *Private; + DWORD NewThreadId; + GRAPHICS_PRIVATE_DATA *Private; Private = AllocateZeroPool (sizeof (*Private)); @@ -758,7 +837,7 @@ WinNtGraphicsWindowOpen ( NULL, 0, WinNtGopThreadWinMain, - (VOID *) Private, + (VOID *)Private, 0, &NewThreadId ); @@ -770,7 +849,7 @@ WinNtGraphicsWindowOpen ( WaitForSingleObject (Private->ThreadInited, INFINITE); CloseHandle (Private->ThreadInited); - This->Private = Private; + This->Private = Private; This->Interface = &Private->GraphicsWindowIo; return EFI_SUCCESS; @@ -779,10 +858,10 @@ WinNtGraphicsWindowOpen ( EFI_STATUS EFIAPI WinNtGraphicsWindowClose ( - IN EMU_IO_THUNK_PROTOCOL *This -) + IN EMU_IO_THUNK_PROTOCOL *This + ) { - GRAPHICS_PRIVATE_DATA *Private; + GRAPHICS_PRIVATE_DATA *Private; Private = (GRAPHICS_PRIVATE_DATA *)This->Private; @@ -807,16 +886,14 @@ WinNtGraphicsWindowClose ( UnregisterClass ( Private->WindowsClass.lpszClassName, Private->WindowsClass.hInstance - ); + ); } - GopPrivateDestroyQ (Private, &Private->QueueForRead); return EFI_SUCCESS; } - -EMU_IO_THUNK_PROTOCOL mWinNtWndThunkIo = { +EMU_IO_THUNK_PROTOCOL mWinNtWndThunkIo = { &gEmuGraphicsWindowProtocolGuid, NULL, NULL, diff --git a/EmulatorPkg/Win/Host/WinHost.c b/EmulatorPkg/Win/Host/WinHost.c index ffd1b9944d..93247c5043 100644 --- a/EmulatorPkg/Win/Host/WinHost.c +++ b/EmulatorPkg/Win/Host/WinHost.c @@ -16,26 +16,26 @@ SPDX-License-Identifier: BSD-2-Clause-Patent #include "WinHost.h" #ifndef SE_TIME_ZONE_NAME -#define SE_TIME_ZONE_NAME TEXT("SeTimeZonePrivilege") +#define SE_TIME_ZONE_NAME TEXT("SeTimeZonePrivilege") #endif // // The growth size for array of module handle entries // -#define MAX_PDB_NAME_TO_MOD_HANDLE_ARRAY_SIZE 0x100 +#define MAX_PDB_NAME_TO_MOD_HANDLE_ARRAY_SIZE 0x100 // // Module handle entry structure // typedef struct { - CHAR8 *PdbPointer; - VOID *ModHandle; + CHAR8 *PdbPointer; + VOID *ModHandle; } PDB_NAME_TO_MOD_HANDLE; // // An Array to hold the module handles // -PDB_NAME_TO_MOD_HANDLE *mPdbNameModHandleArray = NULL; +PDB_NAME_TO_MOD_HANDLE *mPdbNameModHandleArray = NULL; UINTN mPdbNameModHandleArraySize = 0; // @@ -44,8 +44,8 @@ UINTN mPdbNameModHandleArraySize = 0; // The number of array elements is allocated base on parsing // PcdWinNtFirmwareVolume and the memory is never freed. // -UINTN gFdInfoCount = 0; -NT_FD_INFO *gFdInfo; +UINTN gFdInfoCount = 0; +NT_FD_INFO *gFdInfo; // // Array that supports separate memory ranges. @@ -53,8 +53,8 @@ NT_FD_INFO *gFdInfo; // The number of array elements is allocated base on parsing // PcdWinNtMemorySizeForSecMain value and the memory is never freed. // -UINTN gSystemMemoryCount = 0; -NT_SYSTEM_MEMORY *gSystemMemory; +UINTN gSystemMemoryCount = 0; +NT_SYSTEM_MEMORY *gSystemMemory; /*++ @@ -90,7 +90,7 @@ WinPeiAutoScan ( // // Allocate enough memory space for emulator // - gSystemMemory[Index].Memory = (EFI_PHYSICAL_ADDRESS) (UINTN) VirtualAlloc (NULL, (SIZE_T) (gSystemMemory[Index].Size), MEM_COMMIT, PAGE_EXECUTE_READWRITE); + gSystemMemory[Index].Memory = (EFI_PHYSICAL_ADDRESS)(UINTN)VirtualAlloc (NULL, (SIZE_T)(gSystemMemory[Index].Size), MEM_COMMIT, PAGE_EXECUTE_READWRITE); if (gSystemMemory[Index].Memory == 0) { return EFI_OUT_OF_RESOURCES; } @@ -130,12 +130,11 @@ WinFdAddress ( return EFI_UNSUPPORTED; } - *FdBase = (EFI_PHYSICAL_ADDRESS)(UINTN)gFdInfo[Index].Address; *FdSize = (UINT64)gFdInfo[Index].Size; *FixUp = 0; - if (*FdBase == 0 && *FdSize == 0) { + if ((*FdBase == 0) && (*FdSize == 0)) { return EFI_UNSUPPORTED; } @@ -173,8 +172,7 @@ WinThunk ( return &gEmuThunkProtocol; } - -EMU_THUNK_PPI mSecEmuThunkPpi = { +EMU_THUNK_PPI mSecEmuThunkPpi = { WinPeiAutoScan, WinFdAddress, WinThunk @@ -227,7 +225,7 @@ Returns: **/ BOOLEAN EfiSystemMemoryRange ( - IN VOID *MemoryAddress + IN VOID *MemoryAddress ) { UINTN Index; @@ -236,7 +234,8 @@ EfiSystemMemoryRange ( MemoryBase = (EFI_PHYSICAL_ADDRESS)(UINTN)MemoryAddress; for (Index = 0; Index < gSystemMemoryCount; Index++) { if ((MemoryBase >= gSystemMemory[Index].Memory) && - (MemoryBase < (gSystemMemory[Index].Memory + gSystemMemory[Index].Size)) ) { + (MemoryBase < (gSystemMemory[Index].Memory + gSystemMemory[Index].Size))) + { return TRUE; } } @@ -244,15 +243,15 @@ EfiSystemMemoryRange ( return FALSE; } - EFI_STATUS WinNtOpenFile ( - IN CHAR16 *FileName OPTIONAL, - IN UINT32 MapSize, - IN DWORD CreationDisposition, - IN OUT VOID **BaseAddress, - OUT UINTN *Length + IN CHAR16 *FileName OPTIONAL, + IN UINT32 MapSize, + IN DWORD CreationDisposition, + IN OUT VOID **BaseAddress, + OUT UINTN *Length ) + /*++ Routine Description: @@ -300,6 +299,7 @@ Returns: return EFI_NOT_FOUND; } } + // // Map the open file into a memory range // @@ -314,17 +314,18 @@ Returns: if (NtMapHandle == NULL) { return EFI_DEVICE_ERROR; } + // // Get the virtual address (address in the emulator) of the mapped file // VirtualAddress = MapViewOfFileEx ( - NtMapHandle, - FILE_MAP_EXECUTE | FILE_MAP_ALL_ACCESS, - 0, - 0, - MapSize, - *BaseAddress - ); + NtMapHandle, + FILE_MAP_EXECUTE | FILE_MAP_ALL_ACCESS, + 0, + 0, + MapSize, + *BaseAddress + ); if (VirtualAddress == NULL) { return EFI_DEVICE_ERROR; } @@ -334,11 +335,11 @@ Returns: // Seek to the end of the file to figure out the true file size. // FileSize = SetFilePointer ( - NtFileHandle, - 0, - NULL, - FILE_END - ); + NtFileHandle, + 0, + NULL, + FILE_END + ); if (FileSize == -1) { return EFI_DEVICE_ERROR; } @@ -356,10 +357,11 @@ Returns: INTN EFIAPI main ( - IN INT Argc, - IN CHAR8 **Argv, - IN CHAR8 **Envp + IN INT Argc, + IN CHAR8 **Argv, + IN CHAR8 **Envp ) + /*++ Routine Description: @@ -376,37 +378,37 @@ Returns: --*/ { - EFI_STATUS Status; - HANDLE Token; - TOKEN_PRIVILEGES TokenPrivileges; - VOID *TemporaryRam; - UINT32 TemporaryRamSize; - VOID *EmuMagicPage; - UINTN Index; - UINTN Index1; - CHAR16 *FileName; - CHAR16 *FileNamePtr; - BOOLEAN Done; - EFI_PEI_FILE_HANDLE FileHandle; - VOID *SecFile; - CHAR16 *MemorySizeStr; - CHAR16 *FirmwareVolumesStr; - UINTN ProcessAffinityMask; - UINTN SystemAffinityMask; - INT32 LowBit; + EFI_STATUS Status; + HANDLE Token; + TOKEN_PRIVILEGES TokenPrivileges; + VOID *TemporaryRam; + UINT32 TemporaryRamSize; + VOID *EmuMagicPage; + UINTN Index; + UINTN Index1; + CHAR16 *FileName; + CHAR16 *FileNamePtr; + BOOLEAN Done; + EFI_PEI_FILE_HANDLE FileHandle; + VOID *SecFile; + CHAR16 *MemorySizeStr; + CHAR16 *FirmwareVolumesStr; + UINTN ProcessAffinityMask; + UINTN SystemAffinityMask; + INT32 LowBit; // // Enable the privilege so that RTC driver can successfully run SetTime() // - OpenProcessToken (GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY, &Token); - if (LookupPrivilegeValue(NULL, SE_TIME_ZONE_NAME, &TokenPrivileges.Privileges[0].Luid)) { - TokenPrivileges.PrivilegeCount = 1; + OpenProcessToken (GetCurrentProcess (), TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY, &Token); + if (LookupPrivilegeValue (NULL, SE_TIME_ZONE_NAME, &TokenPrivileges.Privileges[0].Luid)) { + TokenPrivileges.PrivilegeCount = 1; TokenPrivileges.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; - AdjustTokenPrivileges(Token, FALSE, &TokenPrivileges, 0, (PTOKEN_PRIVILEGES) NULL, 0); + AdjustTokenPrivileges (Token, FALSE, &TokenPrivileges, 0, (PTOKEN_PRIVILEGES)NULL, 0); } - MemorySizeStr = (CHAR16 *) PcdGetPtr (PcdEmuMemorySize); - FirmwareVolumesStr = (CHAR16 *) PcdGetPtr (PcdEmuFirmwareVolume); + MemorySizeStr = (CHAR16 *)PcdGetPtr (PcdEmuMemorySize); + FirmwareVolumesStr = (CHAR16 *)PcdGetPtr (PcdEmuFirmwareVolume); SecPrint ("\n\rEDK II WIN Host Emulation Environment from http://www.tianocore.org/edk2/\n\r"); @@ -448,8 +450,8 @@ Returns: // // Allocate space for gSystemMemory Array // - gSystemMemoryCount = CountSeparatorsInString (MemorySizeStr, '!') + 1; - gSystemMemory = calloc (gSystemMemoryCount, sizeof (NT_SYSTEM_MEMORY)); + gSystemMemoryCount = CountSeparatorsInString (MemorySizeStr, '!') + 1; + gSystemMemory = calloc (gSystemMemoryCount, sizeof (NT_SYSTEM_MEMORY)); if (gSystemMemory == NULL) { SecPrint ("ERROR : Can not allocate memory for %S. Exiting.\n\r", MemorySizeStr); exit (1); @@ -458,12 +460,13 @@ Returns: // // Allocate space for gSystemMemory Array // - gFdInfoCount = CountSeparatorsInString (FirmwareVolumesStr, '!') + 1; - gFdInfo = calloc (gFdInfoCount, sizeof (NT_FD_INFO)); + gFdInfoCount = CountSeparatorsInString (FirmwareVolumesStr, '!') + 1; + gFdInfo = calloc (gFdInfoCount, sizeof (NT_FD_INFO)); if (gFdInfo == NULL) { SecPrint ("ERROR : Can not allocate memory for %S. Exiting.\n\r", FirmwareVolumesStr); exit (1); } + // // Setup Boot Mode. // @@ -475,14 +478,16 @@ Returns: // Set TemporaryRam to zero so WinNtOpenFile will allocate a new mapping // TemporaryRamSize = TEMPORARY_RAM_SIZE; - TemporaryRam = VirtualAlloc (NULL, (SIZE_T) (TemporaryRamSize), MEM_COMMIT, PAGE_EXECUTE_READWRITE); + TemporaryRam = VirtualAlloc (NULL, (SIZE_T)(TemporaryRamSize), MEM_COMMIT, PAGE_EXECUTE_READWRITE); if (TemporaryRam == NULL) { SecPrint ("ERROR : Can not allocate enough space for SecStack\n\r"); exit (1); } + SetMem32 (TemporaryRam, TemporaryRamSize, PcdGet32 (PcdInitValueInTempStack)); - SecPrint (" OS Emulator passing in %u KB of temp RAM at 0x%08lx to SEC\n\r", + SecPrint ( + " OS Emulator passing in %u KB of temp RAM at 0x%08lx to SEC\n\r", TemporaryRamSize / SIZE_1KB, TemporaryRam ); @@ -497,12 +502,12 @@ Returns: if (EmuMagicPage != NULL) { UINT64 Size; Status = WinNtOpenFile ( - NULL, - SIZE_4KB, - 0, - &EmuMagicPage, - &Size - ); + NULL, + SIZE_4KB, + 0, + &EmuMagicPage, + &Size + ); if (EFI_ERROR (Status)) { SecPrint ("ERROR : Could not allocate PeiServicesTablePage @ %p\n\r", EmuMagicPage); return EFI_DEVICE_ERROR; @@ -521,25 +526,26 @@ Returns: for (Done = FALSE, Index = 0, SecFile = NULL; !Done; Index++) { FileName = FileNamePtr; - for (Index1 = 0; (FileNamePtr[Index1] != '!') && (FileNamePtr[Index1] != 0); Index1++) - ; + for (Index1 = 0; (FileNamePtr[Index1] != '!') && (FileNamePtr[Index1] != 0); Index1++) { + } + if (FileNamePtr[Index1] == 0) { Done = TRUE; } else { - FileNamePtr[Index1] = '\0'; - FileNamePtr = &FileNamePtr[Index1 + 1]; + FileNamePtr[Index1] = '\0'; + FileNamePtr = &FileNamePtr[Index1 + 1]; } // // Open the FD and remember where it got mapped into our processes address space // Status = WinNtOpenFile ( - FileName, - 0, - OPEN_EXISTING, - &gFdInfo[Index].Address, - &gFdInfo[Index].Size - ); + FileName, + 0, + OPEN_EXISTING, + &gFdInfo[Index].Address, + &gFdInfo[Index].Size + ); if (EFI_ERROR (Status)) { SecPrint ("ERROR : Can not open Firmware Device File %S (0x%X). Exiting.\n\r", FileName, Status); exit (1); @@ -553,11 +559,11 @@ Returns: // Load the first one we find. // FileHandle = NULL; - Status = PeiServicesFfsFindNextFile ( - EFI_FV_FILETYPE_SECURITY_CORE, - (EFI_PEI_FV_HANDLE)gFdInfo[Index].Address, - &FileHandle - ); + Status = PeiServicesFfsFindNextFile ( + EFI_FV_FILETYPE_SECURITY_CORE, + (EFI_PEI_FV_HANDLE)gFdInfo[Index].Address, + &FileHandle + ); if (!EFI_ERROR (Status)) { Status = PeiServicesFfsFindSectionData (EFI_SECTION_PE32, FileHandle, &SecFile); if (!EFI_ERROR (Status)) { @@ -568,6 +574,7 @@ Returns: SecPrint ("\n\r"); } + // // Calculate memory regions and store the information in the gSystemMemory // global for later use. The autosizing code will use this data to @@ -582,8 +589,9 @@ Returns: // // Find the next region // - for (Index1 = 0; MemorySizeStr[Index1] != '!' && MemorySizeStr[Index1] != 0; Index1++) - ; + for (Index1 = 0; MemorySizeStr[Index1] != '!' && MemorySizeStr[Index1] != 0; Index1++) { + } + if (MemorySizeStr[Index1] == 0) { Done = TRUE; } @@ -608,12 +616,13 @@ Returns: VOID SecLoadSecCore ( - IN UINTN TemporaryRam, - IN UINTN TemporaryRamSize, - IN VOID *BootFirmwareVolumeBase, - IN UINTN BootFirmwareVolumeSize, - IN VOID *SecCorePe32File + IN UINTN TemporaryRam, + IN UINTN TemporaryRamSize, + IN VOID *BootFirmwareVolumeBase, + IN UINTN BootFirmwareVolumeSize, + IN VOID *SecCorePe32File ) + /*++ Routine Description: @@ -630,11 +639,11 @@ Returns: --*/ { - EFI_STATUS Status; - VOID *TopOfStack; - VOID *SecCoreEntryPoint; - EFI_SEC_PEI_HAND_OFF *SecCoreData; - UINTN SecStackSize; + EFI_STATUS Status; + VOID *TopOfStack; + VOID *SecCoreEntryPoint; + EFI_SEC_PEI_HAND_OFF *SecCoreData; + UINTN SecStackSize; // // Compute Top Of Memory for Stack and PEI Core Allocations @@ -650,37 +659,37 @@ Returns: // | Stack | // |-----------| <---- TemporaryRamBase // - TopOfStack = (VOID *)(TemporaryRam + SecStackSize); + TopOfStack = (VOID *)(TemporaryRam + SecStackSize); // // Reservet space for storing PeiCore's parament in stack. // - TopOfStack = (VOID *)((UINTN)TopOfStack - sizeof (EFI_SEC_PEI_HAND_OFF) - CPU_STACK_ALIGNMENT); - TopOfStack = ALIGN_POINTER (TopOfStack, CPU_STACK_ALIGNMENT); + TopOfStack = (VOID *)((UINTN)TopOfStack - sizeof (EFI_SEC_PEI_HAND_OFF) - CPU_STACK_ALIGNMENT); + TopOfStack = ALIGN_POINTER (TopOfStack, CPU_STACK_ALIGNMENT); // // Bind this information into the SEC hand-off state // - SecCoreData = (EFI_SEC_PEI_HAND_OFF*)(UINTN)TopOfStack; + SecCoreData = (EFI_SEC_PEI_HAND_OFF *)(UINTN)TopOfStack; SecCoreData->DataSize = sizeof (EFI_SEC_PEI_HAND_OFF); SecCoreData->BootFirmwareVolumeBase = BootFirmwareVolumeBase; SecCoreData->BootFirmwareVolumeSize = BootFirmwareVolumeSize; - SecCoreData->TemporaryRamBase = (VOID*)TemporaryRam; + SecCoreData->TemporaryRamBase = (VOID *)TemporaryRam; SecCoreData->TemporaryRamSize = TemporaryRamSize; SecCoreData->StackBase = SecCoreData->TemporaryRamBase; SecCoreData->StackSize = SecStackSize; - SecCoreData->PeiTemporaryRamBase = (VOID*) ((UINTN) SecCoreData->TemporaryRamBase + SecStackSize); + SecCoreData->PeiTemporaryRamBase = (VOID *)((UINTN)SecCoreData->TemporaryRamBase + SecStackSize); SecCoreData->PeiTemporaryRamSize = TemporaryRamSize - SecStackSize; // // Load the PEI Core from a Firmware Volume // Status = SecPeCoffGetEntryPoint ( - SecCorePe32File, - &SecCoreEntryPoint - ); + SecCorePe32File, + &SecCoreEntryPoint + ); if (EFI_ERROR (Status)) { - return ; + return; } // @@ -695,7 +704,7 @@ Returns: // // If we get here, then the SEC Core returned. This is an error // - return ; + return; } RETURN_STATUS @@ -705,26 +714,28 @@ SecPeCoffGetEntryPoint ( IN OUT VOID **EntryPoint ) { - EFI_STATUS Status; - PE_COFF_LOADER_IMAGE_CONTEXT ImageContext; + EFI_STATUS Status; + PE_COFF_LOADER_IMAGE_CONTEXT ImageContext; ZeroMem (&ImageContext, sizeof (ImageContext)); - ImageContext.Handle = Pe32Data; + ImageContext.Handle = Pe32Data; - ImageContext.ImageRead = (PE_COFF_LOADER_READ_FILE) SecImageRead; + ImageContext.ImageRead = (PE_COFF_LOADER_READ_FILE)SecImageRead; - Status = PeCoffLoaderGetImageInfo (&ImageContext); + Status = PeCoffLoaderGetImageInfo (&ImageContext); if (EFI_ERROR (Status)) { return Status; } + // // Allocate space in NT (not emulator) memory with ReadWrite and Execute attribute. // Extra space is for alignment // - ImageContext.ImageAddress = (EFI_PHYSICAL_ADDRESS) (UINTN) VirtualAlloc (NULL, (SIZE_T) (ImageContext.ImageSize + (ImageContext.SectionAlignment * 2)), MEM_COMMIT, PAGE_EXECUTE_READWRITE); + ImageContext.ImageAddress = (EFI_PHYSICAL_ADDRESS)(UINTN)VirtualAlloc (NULL, (SIZE_T)(ImageContext.ImageSize + (ImageContext.SectionAlignment * 2)), MEM_COMMIT, PAGE_EXECUTE_READWRITE); if (ImageContext.ImageAddress == 0) { return EFI_OUT_OF_RESOURCES; } + // // Align buffer on section boundary // @@ -741,7 +752,7 @@ SecPeCoffGetEntryPoint ( return Status; } - *EntryPoint = (VOID *)(UINTN)ImageContext.EntryPoint; + *EntryPoint = (VOID *)(UINTN)ImageContext.EntryPoint; return EFI_SUCCESS; } @@ -749,11 +760,12 @@ SecPeCoffGetEntryPoint ( EFI_STATUS EFIAPI SecImageRead ( - IN VOID *FileHandle, - IN UINTN FileOffset, - IN OUT UINTN *ReadSize, - OUT VOID *Buffer + IN VOID *FileHandle, + IN UINTN FileOffset, + IN OUT UINTN *ReadSize, + OUT VOID *Buffer ) + /*++ Routine Description: @@ -770,13 +782,13 @@ Returns: --*/ { - CHAR8 *Destination8; - CHAR8 *Source8; - UINTN Length; + CHAR8 *Destination8; + CHAR8 *Source8; + UINTN Length; - Destination8 = Buffer; - Source8 = (CHAR8 *) ((UINTN) FileHandle + FileOffset); - Length = *ReadSize; + Destination8 = Buffer; + Source8 = (CHAR8 *)((UINTN)FileHandle + FileOffset); + Length = *ReadSize; while (Length--) { *(Destination8++) = *(Source8++); } @@ -786,9 +798,10 @@ Returns: CHAR16 * AsciiToUnicode ( - IN CHAR8 *Ascii, - IN UINTN *StrLen OPTIONAL + IN CHAR8 *Ascii, + IN UINTN *StrLen OPTIONAL ) + /*++ Routine Description: @@ -810,15 +823,16 @@ Returns: // // Allocate a buffer for unicode string // - for (Index = 0; Ascii[Index] != '\0'; Index++) - ; + for (Index = 0; Ascii[Index] != '\0'; Index++) { + } + Unicode = malloc ((Index + 1) * sizeof (CHAR16)); if (Unicode == NULL) { return NULL; } for (Index = 0; Ascii[Index] != '\0'; Index++) { - Unicode[Index] = (CHAR16) Ascii[Index]; + Unicode[Index] = (CHAR16)Ascii[Index]; } Unicode[Index] = '\0'; @@ -832,9 +846,10 @@ Returns: UINTN CountSeparatorsInString ( - IN CONST CHAR16 *String, - IN CHAR16 Separator + IN CONST CHAR16 *String, + IN CHAR16 Separator ) + /*++ Routine Description: @@ -849,7 +864,7 @@ Returns: --*/ { - UINTN Count; + UINTN Count; for (Count = 0; *String != '\0'; String++) { if (*String == Separator) { @@ -871,8 +886,8 @@ Returns: --*/ EFI_STATUS AddModHandle ( - IN PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext, - IN VOID *ModHandle + IN PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext, + IN VOID *ModHandle ) { @@ -888,7 +903,7 @@ AddModHandle ( // Array = mPdbNameModHandleArray; for (Index = 0; Index < mPdbNameModHandleArraySize; Index++, Array++) { - if (Array->PdbPointer != NULL && Array->ModHandle == ModHandle) { + if ((Array->PdbPointer != NULL) && (Array->ModHandle == ModHandle)) { return EFI_ALREADY_STARTED; } } @@ -899,9 +914,9 @@ AddModHandle ( // // Make a copy of the stirng and store the ModHandle // - Handle = GetProcessHeap (); - Size = AsciiStrLen (ImageContext->PdbPointer) + 1; - Array->PdbPointer = HeapAlloc ( Handle, HEAP_ZERO_MEMORY, Size); + Handle = GetProcessHeap (); + Size = AsciiStrLen (ImageContext->PdbPointer) + 1; + Array->PdbPointer = HeapAlloc (Handle, HEAP_ZERO_MEMORY, Size); ASSERT (Array->PdbPointer != NULL); AsciiStrCpyS (Array->PdbPointer, Size, ImageContext->PdbPointer); @@ -914,17 +929,18 @@ AddModHandle ( // No free space in mPdbNameModHandleArray so grow it by // MAX_PDB_NAME_TO_MOD_HANDLE_ARRAY_SIZE entires. // - PreviousSize = mPdbNameModHandleArraySize * sizeof (PDB_NAME_TO_MOD_HANDLE); + PreviousSize = mPdbNameModHandleArraySize * sizeof (PDB_NAME_TO_MOD_HANDLE); mPdbNameModHandleArraySize += MAX_PDB_NAME_TO_MOD_HANDLE_ARRAY_SIZE; // // re-allocate a new buffer and copy the old values to the new locaiton. // - TempArray = HeapAlloc (GetProcessHeap (), - HEAP_ZERO_MEMORY, - mPdbNameModHandleArraySize * sizeof (PDB_NAME_TO_MOD_HANDLE) - ); + TempArray = HeapAlloc ( + GetProcessHeap (), + HEAP_ZERO_MEMORY, + mPdbNameModHandleArraySize * sizeof (PDB_NAME_TO_MOD_HANDLE) + ); - CopyMem ((VOID *) (UINTN) TempArray, (VOID *) (UINTN)mPdbNameModHandleArray, PreviousSize); + CopyMem ((VOID *)(UINTN)TempArray, (VOID *)(UINTN)mPdbNameModHandleArray, PreviousSize); HeapFree (GetProcessHeap (), 0, mPdbNameModHandleArray); @@ -947,7 +963,7 @@ AddModHandle ( **/ VOID * RemoveModHandle ( - IN PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext + IN PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext ) { UINTN Index; @@ -962,7 +978,7 @@ RemoveModHandle ( Array = mPdbNameModHandleArray; for (Index = 0; Index < mPdbNameModHandleArraySize; Index++, Array++) { - if ((Array->PdbPointer != NULL) && (AsciiStrCmp(Array->PdbPointer, ImageContext->PdbPointer) == 0)) { + if ((Array->PdbPointer != NULL) && (AsciiStrCmp (Array->PdbPointer, ImageContext->PdbPointer) == 0)) { // // If you find a match return it and delete the entry // @@ -978,14 +994,14 @@ RemoveModHandle ( VOID EFIAPI PeCoffLoaderRelocateImageExtraAction ( - IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext + IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext ) { - EFI_STATUS Status; - VOID *DllEntryPoint; - CHAR16 *DllFileName; - HMODULE Library; - UINTN Index; + EFI_STATUS Status; + VOID *DllEntryPoint; + CHAR16 *DllFileName; + HMODULE Library; + UINTN Index; ASSERT (ImageContext != NULL); // @@ -1003,7 +1019,8 @@ PeCoffLoaderRelocateImageExtraAction ( // Load the DLL if it's not an EBC image. // if ((ImageContext->PdbPointer != NULL) && - (ImageContext->Machine != EFI_IMAGE_MACHINE_EBC)) { + (ImageContext->Machine != EFI_IMAGE_MACHINE_EBC)) + { // // Convert filename from ASCII to Unicode // @@ -1012,7 +1029,7 @@ PeCoffLoaderRelocateImageExtraAction ( // // Check that we have a valid filename // - if (Index < 5 || DllFileName[Index - 4] != '.') { + if ((Index < 5) || (DllFileName[Index - 4] != '.')) { free (DllFileName); // @@ -1022,12 +1039,13 @@ PeCoffLoaderRelocateImageExtraAction ( // return; } + // // Replace .PDB with .DLL on the filename // - DllFileName[Index - 3] = 'D'; - DllFileName[Index - 2] = 'L'; - DllFileName[Index - 1] = 'L'; + DllFileName[Index - 3] = 'D'; + DllFileName[Index - 2] = 'L'; + DllFileName[Index - 1] = 'L'; // // Load the .DLL file into the user process's address space for source @@ -1043,8 +1061,7 @@ PeCoffLoaderRelocateImageExtraAction ( // checking as the we can point to the PE32 image loaded by Tiano. This // step is only needed for source level debugging // - DllEntryPoint = (VOID *) (UINTN) GetProcAddress (Library, "InitializeDriver"); - + DllEntryPoint = (VOID *)(UINTN)GetProcAddress (Library, "InitializeDriver"); } if ((Library != NULL) && (DllEntryPoint != NULL)) { @@ -1059,7 +1076,7 @@ PeCoffLoaderRelocateImageExtraAction ( // // This DLL is not already loaded, so source level debugging is supported. // - ImageContext->EntryPoint = (EFI_PHYSICAL_ADDRESS) (UINTN) DllEntryPoint; + ImageContext->EntryPoint = (EFI_PHYSICAL_ADDRESS)(UINTN)DllEntryPoint; SecPrint ("LoadLibraryEx (\n\r %S,\n\r NULL, DONT_RESOLVE_DLL_REFERENCES)\n\r", DllFileName); } } else { @@ -1074,7 +1091,7 @@ VOID EFIAPI PeCoffLoaderUnloadImageExtraAction ( IN PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext -) + ) { VOID *ModHandle; diff --git a/EmulatorPkg/Win/Host/WinHost.h b/EmulatorPkg/Win/Host/WinHost.h index b36fea254e..49d42d1ad8 100644 --- a/EmulatorPkg/Win/Host/WinHost.h +++ b/EmulatorPkg/Win/Host/WinHost.h @@ -12,6 +12,7 @@ Abstract: Include file for Windows Host **/ + #ifndef _HOST_H_ #define _HOST_H_ @@ -45,17 +46,16 @@ Abstract: #include #include - -#define TEMPORARY_RAM_SIZE 0x20000 +#define TEMPORARY_RAM_SIZE 0x20000 typedef struct { - VOID *Address; - UINTN Size; + VOID *Address; + UINTN Size; } NT_FD_INFO; typedef struct { - EFI_PHYSICAL_ADDRESS Memory; - UINT64 Size; + EFI_PHYSICAL_ADDRESS Memory; + UINT64 Size; } NT_SYSTEM_MEMORY; RETURN_STATUS @@ -63,16 +63,17 @@ EFIAPI SecPeCoffGetEntryPoint ( IN VOID *Pe32Data, IN OUT VOID **EntryPoint -); + ); VOID SecLoadSecCore ( - IN UINTN TemporaryRam, - IN UINTN TemporaryRamSize, - IN VOID *BootFirmwareVolumeBase, - IN UINTN BootFirmwareVolumeSize, - IN VOID *SecCorePe32File -) + IN UINTN TemporaryRam, + IN UINTN TemporaryRamSize, + IN VOID *BootFirmwareVolumeBase, + IN UINTN BootFirmwareVolumeSize, + IN VOID *SecCorePe32File + ) + /*++ Routine Description: @@ -97,6 +98,7 @@ SecWinNtFdAddress ( IN OUT EFI_PHYSICAL_ADDRESS *FdBase, IN OUT UINT64 *FdSize ) + /*++ Routine Description: @@ -116,15 +118,15 @@ Returns: --*/ ; - EFI_STATUS EFIAPI SecImageRead ( - IN VOID *FileHandle, - IN UINTN FileOffset, - IN OUT UINTN *ReadSize, - OUT VOID *Buffer + IN VOID *FileHandle, + IN UINTN FileOffset, + IN OUT UINTN *ReadSize, + OUT VOID *Buffer ) + /*++ Routine Description: @@ -147,9 +149,10 @@ Returns: CHAR16 * AsciiToUnicode ( - IN CHAR8 *Ascii, - IN UINTN *StrLen OPTIONAL + IN CHAR8 *Ascii, + IN UINTN *StrLen OPTIONAL ) + /*++ Routine Description: @@ -170,9 +173,10 @@ Returns: UINTN CountSeparatorsInString ( - IN CONST CHAR16 *String, - IN CHAR16 Separator + IN CONST CHAR16 *String, + IN CHAR16 Separator ) + /*++ Routine Description: @@ -193,16 +197,18 @@ Returns: BOOLEAN EfiSystemMemoryRange ( - IN VOID *MemoryAddress + IN VOID *MemoryAddress ); + VOID SecInitializeThunk ( VOID -); -extern EMU_THUNK_PROTOCOL gEmuThunkProtocol; -extern EMU_IO_THUNK_PROTOCOL mWinNtWndThunkIo; -extern EMU_IO_THUNK_PROTOCOL mWinNtFileSystemThunkIo; -extern EMU_IO_THUNK_PROTOCOL mWinNtBlockIoThunkIo; -extern EMU_IO_THUNK_PROTOCOL mWinNtSnpThunkIo; + ); + +extern EMU_THUNK_PROTOCOL gEmuThunkProtocol; +extern EMU_IO_THUNK_PROTOCOL mWinNtWndThunkIo; +extern EMU_IO_THUNK_PROTOCOL mWinNtFileSystemThunkIo; +extern EMU_IO_THUNK_PROTOCOL mWinNtBlockIoThunkIo; +extern EMU_IO_THUNK_PROTOCOL mWinNtSnpThunkIo; #endif diff --git a/EmulatorPkg/Win/Host/WinInclude.h b/EmulatorPkg/Win/Host/WinInclude.h index 8a9ae7d746..c2b6cfa3d6 100644 --- a/EmulatorPkg/Win/Host/WinInclude.h +++ b/EmulatorPkg/Win/Host/WinInclude.h @@ -19,13 +19,13 @@ SPDX-License-Identifier: BSD-2-Clause-Patent #pragma warning(disable : 4028) #pragma warning(disable : 4133) -#define GUID _WINNT_DUP_GUID_____ +#define GUID _WINNT_DUP_GUID_____ #define _LIST_ENTRY _WINNT_DUP_LIST_ENTRY_FORWARD #define LIST_ENTRY _WINNT_DUP_LIST_ENTRY #if defined (MDE_CPU_IA32) && (_MSC_VER < 1800) -#define InterlockedIncrement _WINNT_DUP_InterlockedIncrement -#define InterlockedDecrement _WINNT_DUP_InterlockedDecrement -#define InterlockedCompareExchange64 _WINNT_DUP_InterlockedCompareExchange64 +#define InterlockedIncrement _WINNT_DUP_InterlockedIncrement +#define InterlockedDecrement _WINNT_DUP_InterlockedDecrement +#define InterlockedCompareExchange64 _WINNT_DUP_InterlockedCompareExchange64 #endif #undef UNALIGNED #undef CONST @@ -36,7 +36,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent // It should be removed after the root cause why // size_t is undefined when go into the line below is found. #if defined (MDE_CPU_IA32) -typedef UINT32 size_t ; +typedef UINT32 size_t; #endif #include "windows.h" @@ -51,7 +51,7 @@ typedef UINT32 size_t ; #undef InterlockedCompareExchangePointer #undef CreateEventEx -#define VOID void +#define VOID void // // Prevent collisions with Windows API name macros that deal with Unicode/Not issues @@ -66,5 +66,4 @@ typedef UINT32 size_t ; #pragma warning(default : 4115) #pragma warning(default : 4201) - #endif diff --git a/EmulatorPkg/Win/Host/WinMemoryAllocationLib.c b/EmulatorPkg/Win/Host/WinMemoryAllocationLib.c index a29ebddd14..4d972d2c2e 100644 --- a/EmulatorPkg/Win/Host/WinMemoryAllocationLib.c +++ b/EmulatorPkg/Win/Host/WinMemoryAllocationLib.c @@ -30,10 +30,9 @@ AllocatePool ( IN UINTN AllocationSize ) { - return (VOID*) malloc (AllocationSize); + return (VOID *)malloc (AllocationSize); } - /** Allocates and zeros a buffer of type EfiBootServicesData. @@ -53,7 +52,7 @@ AllocateZeroPool ( IN UINTN AllocationSize ) { - VOID *Buffer; + VOID *Buffer; Buffer = AllocatePool (AllocationSize); if (Buffer == NULL) { @@ -65,7 +64,6 @@ AllocateZeroPool ( return Buffer; } - /** Reallocates a buffer of type EfiBootServicesData. @@ -95,7 +93,7 @@ ReallocatePool ( IN VOID *OldBuffer OPTIONAL ) { - VOID *NewBuffer; + VOID *NewBuffer; NewBuffer = AllocatePool (NewSize); if (NewBuffer == NULL) { @@ -143,10 +141,10 @@ AllocateCopyPool ( if (Memory != NULL) { Memory = CopyMem (Memory, Buffer, AllocationSize); } + return Memory; } - /** Frees a buffer that was previously allocated with one of the pool allocation functions in the Memory Allocation Library. @@ -164,9 +162,8 @@ AllocateCopyPool ( VOID EFIAPI FreePool ( - IN VOID *Buffer + IN VOID *Buffer ) { - free ((void *) Buffer); + free ((void *)Buffer); } - diff --git a/EmulatorPkg/Win/Host/WinPacketFilter.c b/EmulatorPkg/Win/Host/WinPacketFilter.c index 0b751f97e3..21859897c8 100644 --- a/EmulatorPkg/Win/Host/WinPacketFilter.c +++ b/EmulatorPkg/Win/Host/WinPacketFilter.c @@ -20,16 +20,16 @@ SPDX-License-Identifier: BSD-2-Clause-Patent #pragma pack(1) typedef struct _NT_NET_INTERFACE_INFO { - UINT32 InterfaceIndex; - EFI_MAC_ADDRESS MacAddr; + UINT32 InterfaceIndex; + EFI_MAC_ADDRESS MacAddr; } NT_NET_INTERFACE_INFO; #pragma pack() -#define NET_ETHER_HEADER_SIZE 14 -#define MAX_INTERFACE_INFO_NUMBER 16 -#define SNP_MAX_TX_BUFFER_NUM 65536 -#define SNP_TX_BUFFER_INCREASEMENT 32 -#define DEFAULT_SELECTED_NIC_INDEX 0 +#define NET_ETHER_HEADER_SIZE 14 +#define MAX_INTERFACE_INFO_NUMBER 16 +#define SNP_MAX_TX_BUFFER_NUM 65536 +#define SNP_TX_BUFFER_INCREASEMENT 32 +#define DEFAULT_SELECTED_NIC_INDEX 0 // // Functions in Net Library @@ -37,8 +37,8 @@ typedef struct _NT_NET_INTERFACE_INFO { typedef INT32 (*NT_NET_INITIALIZE) ( - IN OUT UINT32 *InterfaceCount, - IN OUT NT_NET_INTERFACE_INFO * InterfaceInfoBuffer + IN OUT UINT32 *InterfaceCount, + IN OUT NT_NET_INTERFACE_INFO *InterfaceInfoBuffer ); typedef @@ -50,85 +50,84 @@ INT32 typedef INT32 (*NT_NET_SET_RECEIVE_FILTER) ( - IN UINT32 Index, - IN UINT32 EnableFilter, - IN UINT32 MCastFilterCnt, - IN EFI_MAC_ADDRESS * MCastFilter + IN UINT32 Index, + IN UINT32 EnableFilter, + IN UINT32 MCastFilterCnt, + IN EFI_MAC_ADDRESS *MCastFilter ); typedef INT32 (*NT_NET_RECEIVE) ( - IN UINT32 Index, - IN OUT UINT32 *BufferSize, - OUT VOID *Buffer + IN UINT32 Index, + IN OUT UINT32 *BufferSize, + OUT VOID *Buffer ); typedef INT32 (*NT_NET_TRANSMIT) ( - IN UINT32 Index, - IN UINT32 HeaderSize, - IN UINT32 BufferSize, - IN VOID *Buffer, - IN EFI_MAC_ADDRESS * SrcAddr, - IN EFI_MAC_ADDRESS * DestAddr, - IN UINT16 *Protocol + IN UINT32 Index, + IN UINT32 HeaderSize, + IN UINT32 BufferSize, + IN VOID *Buffer, + IN EFI_MAC_ADDRESS *SrcAddr, + IN EFI_MAC_ADDRESS *DestAddr, + IN UINT16 *Protocol ); typedef struct _NT_NET_UTILITY_TABLE { - NT_NET_INITIALIZE Initialize; - NT_NET_FINALIZE Finalize; - NT_NET_SET_RECEIVE_FILTER SetReceiveFilter; - NT_NET_RECEIVE Receive; - NT_NET_TRANSMIT Transmit; + NT_NET_INITIALIZE Initialize; + NT_NET_FINALIZE Finalize; + NT_NET_SET_RECEIVE_FILTER SetReceiveFilter; + NT_NET_RECEIVE Receive; + NT_NET_TRANSMIT Transmit; } NT_NET_UTILITY_TABLE; // // Instance data for each fake SNP instance // -#define WIN_NT_INSTANCE_SIGNATURE SIGNATURE_32 ('N', 'T', 'I', 'S') +#define WIN_NT_INSTANCE_SIGNATURE SIGNATURE_32 ('N', 'T', 'I', 'S') typedef struct { - UINT32 Signature; + UINT32 Signature; // // Array of the recycled transmit buffer address. // - UINT64 *RecycledTxBuf; + UINT64 *RecycledTxBuf; // // Current number of recycled buffer pointers in RecycledTxBuf. // - UINT32 RecycledTxBufCount; + UINT32 RecycledTxBufCount; // // The maximum number of recycled buffer pointers in RecycledTxBuf. // - UINT32 MaxRecycledTxBuf; - EFI_SIMPLE_NETWORK_MODE Mode; - NT_NET_INTERFACE_INFO InterfaceInfo; + UINT32 MaxRecycledTxBuf; + EFI_SIMPLE_NETWORK_MODE Mode; + NT_NET_INTERFACE_INFO InterfaceInfo; } WIN_NT_INSTANCE_DATA; // // Instance data for each SNP private instance // -#define WIN_NT_SIMPLE_NETWORK_PRIVATE_SIGNATURE SIGNATURE_32 ('N', 'T', 's', 'n') +#define WIN_NT_SIMPLE_NETWORK_PRIVATE_SIGNATURE SIGNATURE_32 ('N', 'T', 's', 'n') typedef struct { - UINTN Signature; - EMU_IO_THUNK_PROTOCOL *Thunk; - EMU_SNP_PROTOCOL EmuSnp; - EFI_SIMPLE_NETWORK_MODE *Mode; - HMODULE NetworkLibraryHandle; - NT_NET_UTILITY_TABLE NtNetUtilityTable; - WIN_NT_INSTANCE_DATA Instance; + UINTN Signature; + EMU_IO_THUNK_PROTOCOL *Thunk; + EMU_SNP_PROTOCOL EmuSnp; + EFI_SIMPLE_NETWORK_MODE *Mode; + HMODULE NetworkLibraryHandle; + NT_NET_UTILITY_TABLE NtNetUtilityTable; + WIN_NT_INSTANCE_DATA Instance; } WIN_NT_SNP_PRIVATE; #define WIN_NT_SNP_PRIVATE_DATA_FROM_THIS(a) \ CR(a, WIN_NT_SNP_PRIVATE, EmuSnp, WIN_NT_SIMPLE_NETWORK_PRIVATE_SIGNATURE) - /** Register storage for SNP Mode. @@ -145,7 +144,7 @@ WinNtSnpCreateMapping ( IN EFI_SIMPLE_NETWORK_MODE *Mode ) { - WIN_NT_SNP_PRIVATE *Private; + WIN_NT_SNP_PRIVATE *Private; Private = WIN_NT_SNP_PRIVATE_DATA_FROM_THIS (This); @@ -181,7 +180,7 @@ WinNtSnpStart ( IN EMU_SNP_PROTOCOL *This ) { - WIN_NT_SNP_PRIVATE *Private; + WIN_NT_SNP_PRIVATE *Private; Private = WIN_NT_SNP_PRIVATE_DATA_FROM_THIS (This); @@ -221,7 +220,7 @@ WinNtSnpStop ( IN EMU_SNP_PROTOCOL *This ) { - WIN_NT_SNP_PRIVATE *Private; + WIN_NT_SNP_PRIVATE *Private; Private = WIN_NT_SNP_PRIVATE_DATA_FROM_THIS (This); @@ -271,12 +270,12 @@ WinNtSnpStop ( **/ EFI_STATUS WinNtSnpInitialize ( - IN EMU_SNP_PROTOCOL *This, - IN UINTN ExtraRxBufferSize OPTIONAL, - IN UINTN ExtraTxBufferSize OPTIONAL + IN EMU_SNP_PROTOCOL *This, + IN UINTN ExtraRxBufferSize OPTIONAL, + IN UINTN ExtraTxBufferSize OPTIONAL ) { - WIN_NT_SNP_PRIVATE *Private; + WIN_NT_SNP_PRIVATE *Private; Private = WIN_NT_SNP_PRIVATE_DATA_FROM_THIS (This); @@ -293,7 +292,7 @@ WinNtSnpInitialize ( break; } - Private->Mode->MCastFilterCount = 0; + Private->Mode->MCastFilterCount = 0; Private->Mode->ReceiveFilterSetting = 0; ZeroMem (Private->Mode->MCastFilter, sizeof (Private->Mode->MCastFilter)); @@ -320,11 +319,11 @@ WinNtSnpInitialize ( **/ EFI_STATUS WinNtSnpReset ( - IN EMU_SNP_PROTOCOL *This, - IN BOOLEAN ExtendedVerification + IN EMU_SNP_PROTOCOL *This, + IN BOOLEAN ExtendedVerification ) { - WIN_NT_SNP_PRIVATE *Private; + WIN_NT_SNP_PRIVATE *Private; Private = WIN_NT_SNP_PRIVATE_DATA_FROM_THIS (This); @@ -362,7 +361,7 @@ WinNtSnpShutdown ( IN EMU_SNP_PROTOCOL *This ) { - WIN_NT_SNP_PRIVATE *Private; + WIN_NT_SNP_PRIVATE *Private; Private = WIN_NT_SNP_PRIVATE_DATA_FROM_THIS (This); @@ -382,7 +381,7 @@ WinNtSnpShutdown ( Private->Mode->State = EfiSimpleNetworkStarted; Private->Mode->ReceiveFilterSetting = 0; - Private->Mode->MCastFilterCount = 0; + Private->Mode->MCastFilterCount = 0; ZeroMem (Private->Mode->MCastFilter, sizeof (Private->Mode->MCastFilter)); return EFI_SUCCESS; @@ -414,25 +413,25 @@ WinNtSnpShutdown ( **/ EFI_STATUS WinNtSnpReceiveFilters ( - IN EMU_SNP_PROTOCOL *This, - IN UINT32 Enable, - IN UINT32 Disable, - IN BOOLEAN ResetMCastFilter, - IN UINTN MCastFilterCnt OPTIONAL, - IN EFI_MAC_ADDRESS *MCastFilter OPTIONAL + IN EMU_SNP_PROTOCOL *This, + IN UINT32 Enable, + IN UINT32 Disable, + IN BOOLEAN ResetMCastFilter, + IN UINTN MCastFilterCnt OPTIONAL, + IN EFI_MAC_ADDRESS *MCastFilter OPTIONAL ) { - WIN_NT_SNP_PRIVATE *Private; - INT32 ReturnValue; + WIN_NT_SNP_PRIVATE *Private; + INT32 ReturnValue; Private = WIN_NT_SNP_PRIVATE_DATA_FROM_THIS (This); ReturnValue = Private->NtNetUtilityTable.SetReceiveFilter ( - Private->Instance.InterfaceInfo.InterfaceIndex, - Enable, - (UINT32)MCastFilterCnt, - MCastFilter - ); + Private->Instance.InterfaceInfo.InterfaceIndex, + Enable, + (UINT32)MCastFilterCnt, + MCastFilter + ); if (ReturnValue <= 0) { return EFI_DEVICE_ERROR; @@ -458,12 +457,12 @@ WinNtSnpReceiveFilters ( **/ EFI_STATUS WinNtSnpStationAddress ( - IN EMU_SNP_PROTOCOL *This, - IN BOOLEAN Reset, - IN EFI_MAC_ADDRESS *New OPTIONAL + IN EMU_SNP_PROTOCOL *This, + IN BOOLEAN Reset, + IN EFI_MAC_ADDRESS *New OPTIONAL ) { - WIN_NT_SNP_PRIVATE *Private; + WIN_NT_SNP_PRIVATE *Private; Private = WIN_NT_SNP_PRIVATE_DATA_FROM_THIS (This); @@ -493,13 +492,13 @@ WinNtSnpStationAddress ( **/ EFI_STATUS WinNtSnpStatistics ( - IN EMU_SNP_PROTOCOL *This, - IN BOOLEAN Reset, - IN OUT UINTN *StatisticsSize OPTIONAL, - OUT EFI_NETWORK_STATISTICS *StatisticsTable OPTIONAL + IN EMU_SNP_PROTOCOL *This, + IN BOOLEAN Reset, + IN OUT UINTN *StatisticsSize OPTIONAL, + OUT EFI_NETWORK_STATISTICS *StatisticsTable OPTIONAL ) { - WIN_NT_SNP_PRIVATE *Private; + WIN_NT_SNP_PRIVATE *Private; Private = WIN_NT_SNP_PRIVATE_DATA_FROM_THIS (This); @@ -529,13 +528,13 @@ WinNtSnpStatistics ( **/ EFI_STATUS WinNtSnpMCastIpToMac ( - IN EMU_SNP_PROTOCOL *This, - IN BOOLEAN IPv6, - IN EFI_IP_ADDRESS *IP, - OUT EFI_MAC_ADDRESS *MAC + IN EMU_SNP_PROTOCOL *This, + IN BOOLEAN IPv6, + IN EFI_IP_ADDRESS *IP, + OUT EFI_MAC_ADDRESS *MAC ) { - WIN_NT_SNP_PRIVATE *Private; + WIN_NT_SNP_PRIVATE *Private; Private = WIN_NT_SNP_PRIVATE_DATA_FROM_THIS (This); @@ -564,14 +563,14 @@ WinNtSnpMCastIpToMac ( **/ EFI_STATUS WinNtSnpNvData ( - IN EMU_SNP_PROTOCOL *This, - IN BOOLEAN ReadWrite, - IN UINTN Offset, - IN UINTN BufferSize, - IN OUT VOID *Buffer + IN EMU_SNP_PROTOCOL *This, + IN BOOLEAN ReadWrite, + IN UINTN Offset, + IN UINTN BufferSize, + IN OUT VOID *Buffer ) { - WIN_NT_SNP_PRIVATE *Private; + WIN_NT_SNP_PRIVATE *Private; Private = WIN_NT_SNP_PRIVATE_DATA_FROM_THIS (This); @@ -605,21 +604,21 @@ WinNtSnpNvData ( **/ EFI_STATUS WinNtSnpGetStatus ( - IN EMU_SNP_PROTOCOL *This, - OUT UINT32 *InterruptStatus OPTIONAL, - OUT VOID **TxBuf OPTIONAL + IN EMU_SNP_PROTOCOL *This, + OUT UINT32 *InterruptStatus OPTIONAL, + OUT VOID **TxBuf OPTIONAL ) { - WIN_NT_SNP_PRIVATE *Private; + WIN_NT_SNP_PRIVATE *Private; Private = WIN_NT_SNP_PRIVATE_DATA_FROM_THIS (This); if (TxBuf != NULL) { if (Private->Instance.RecycledTxBufCount != 0) { - Private->Instance.RecycledTxBufCount --; - *((UINT8 **) TxBuf) = (UINT8 *) (UINTN)Private->Instance.RecycledTxBuf[Private->Instance.RecycledTxBufCount]; + Private->Instance.RecycledTxBufCount--; + *((UINT8 **)TxBuf) = (UINT8 *)(UINTN)Private->Instance.RecycledTxBuf[Private->Instance.RecycledTxBufCount]; } else { - *((UINT8 **) TxBuf) = NULL; + *((UINT8 **)TxBuf) = NULL; } } @@ -665,18 +664,18 @@ WinNtSnpGetStatus ( **/ EFI_STATUS WinNtSnpTransmit ( - IN EMU_SNP_PROTOCOL *This, - IN UINTN HeaderSize, - IN UINTN BufferSize, - IN VOID *Buffer, - IN EFI_MAC_ADDRESS *SrcAddr OPTIONAL, - IN EFI_MAC_ADDRESS *DestAddr OPTIONAL, - IN UINT16 *Protocol OPTIONAL + IN EMU_SNP_PROTOCOL *This, + IN UINTN HeaderSize, + IN UINTN BufferSize, + IN VOID *Buffer, + IN EFI_MAC_ADDRESS *SrcAddr OPTIONAL, + IN EFI_MAC_ADDRESS *DestAddr OPTIONAL, + IN UINT16 *Protocol OPTIONAL ) { - WIN_NT_SNP_PRIVATE *Private; - INT32 ReturnValue; - UINT64 *Tmp; + WIN_NT_SNP_PRIVATE *Private; + INT32 ReturnValue; + UINT64 *Tmp; Private = WIN_NT_SNP_PRIVATE_DATA_FROM_THIS (This); @@ -685,14 +684,14 @@ WinNtSnpTransmit ( } ReturnValue = Private->NtNetUtilityTable.Transmit ( - Private->Instance.InterfaceInfo.InterfaceIndex, - (UINT32)HeaderSize, - (UINT32)BufferSize, - Buffer, - SrcAddr, - DestAddr, - Protocol - ); + Private->Instance.InterfaceInfo.InterfaceIndex, + (UINT32)HeaderSize, + (UINT32)BufferSize, + Buffer, + SrcAddr, + DestAddr, + Protocol + ); if (ReturnValue < 0) { return EFI_DEVICE_ERROR; @@ -702,16 +701,17 @@ WinNtSnpTransmit ( } if (Private->Instance.RecycledTxBufCount < Private->Instance.MaxRecycledTxBuf) { - Private->Instance.RecycledTxBuf[Private->Instance.RecycledTxBufCount] = (UINT64) Buffer; - Private->Instance.RecycledTxBufCount ++; + Private->Instance.RecycledTxBuf[Private->Instance.RecycledTxBufCount] = (UINT64)Buffer; + Private->Instance.RecycledTxBufCount++; } else { Tmp = malloc (sizeof (UINT64) * (Private->Instance.MaxRecycledTxBuf + SNP_TX_BUFFER_INCREASEMENT)); if (Tmp == NULL) { return EFI_DEVICE_ERROR; } + CopyMem (Tmp, Private->Instance.RecycledTxBuf, sizeof (UINT64) * Private->Instance.RecycledTxBufCount); free (Private->Instance.RecycledTxBuf); - Private->Instance.RecycledTxBuf = Tmp; + Private->Instance.RecycledTxBuf = Tmp; Private->Instance.MaxRecycledTxBuf += SNP_TX_BUFFER_INCREASEMENT; } } @@ -753,30 +753,30 @@ WinNtSnpTransmit ( **/ EFI_STATUS WinNtSnpReceive ( - IN EMU_SNP_PROTOCOL *This, - OUT UINTN *HeaderSize OPTIONAL, - IN OUT UINTN *BufferSize, - OUT VOID *Buffer, - OUT EFI_MAC_ADDRESS *SrcAddr OPTIONAL, - OUT EFI_MAC_ADDRESS *DestAddr OPTIONAL, - OUT UINT16 *Protocol OPTIONAL + IN EMU_SNP_PROTOCOL *This, + OUT UINTN *HeaderSize OPTIONAL, + IN OUT UINTN *BufferSize, + OUT VOID *Buffer, + OUT EFI_MAC_ADDRESS *SrcAddr OPTIONAL, + OUT EFI_MAC_ADDRESS *DestAddr OPTIONAL, + OUT UINT16 *Protocol OPTIONAL ) { - WIN_NT_SNP_PRIVATE *Private; - INT32 ReturnValue; - UINTN BufSize; + WIN_NT_SNP_PRIVATE *Private; + INT32 ReturnValue; + UINTN BufSize; Private = WIN_NT_SNP_PRIVATE_DATA_FROM_THIS (This); - BufSize = *BufferSize; + BufSize = *BufferSize; ASSERT (Private->NtNetUtilityTable.Receive != NULL); ReturnValue = Private->NtNetUtilityTable.Receive ( - Private->Instance.InterfaceInfo.InterfaceIndex, - BufferSize, - Buffer - ); + Private->Instance.InterfaceInfo.InterfaceIndex, + BufferSize, + Buffer + ); if (ReturnValue < 0) { if (ReturnValue == -100) { @@ -794,16 +794,16 @@ WinNtSnpReceive ( if (SrcAddr != NULL) { ZeroMem (SrcAddr, sizeof (EFI_MAC_ADDRESS)); - CopyMem (SrcAddr, ((UINT8 *) Buffer) + 6, 6); + CopyMem (SrcAddr, ((UINT8 *)Buffer) + 6, 6); } if (DestAddr != NULL) { ZeroMem (DestAddr, sizeof (EFI_MAC_ADDRESS)); - CopyMem (DestAddr, ((UINT8 *) Buffer), 6); + CopyMem (DestAddr, ((UINT8 *)Buffer), 6); } if (Protocol != NULL) { - *Protocol = NTOHS (*((UINT16 *) (((UINT8 *) Buffer) + 12))); + *Protocol = NTOHS (*((UINT16 *)(((UINT8 *)Buffer) + 12))); } return (*BufferSize <= BufSize) ? EFI_SUCCESS : EFI_BUFFER_TOO_SMALL; @@ -821,27 +821,27 @@ WinNtSnpReceive ( **/ EFI_STATUS WinNtInitializeInstanceData ( - IN OUT WIN_NT_INSTANCE_DATA *Instance, - IN NT_NET_INTERFACE_INFO *NetInfo + IN OUT WIN_NT_INSTANCE_DATA *Instance, + IN NT_NET_INTERFACE_INFO *NetInfo ) { - if (Instance == NULL || NetInfo == NULL) { + if ((Instance == NULL) || (NetInfo == NULL)) { return EFI_INVALID_PARAMETER; } ZeroMem (Instance, sizeof (WIN_NT_INSTANCE_DATA)); - Instance->Signature = WIN_NT_INSTANCE_SIGNATURE; - Instance->RecycledTxBufCount = 0; - Instance->MaxRecycledTxBuf = 32; - Instance->Mode.State = EfiSimpleNetworkInitialized; - Instance->Mode.HwAddressSize = NET_ETHER_ADDR_LEN; - Instance->Mode.MediaHeaderSize = NET_ETHER_HEADER_SIZE; - Instance->Mode.MaxPacketSize = 1500; - Instance->Mode.MaxMCastFilterCount = MAX_MCAST_FILTER_CNT; - Instance->Mode.IfType = NET_IFTYPE_ETHERNET; + Instance->Signature = WIN_NT_INSTANCE_SIGNATURE; + Instance->RecycledTxBufCount = 0; + Instance->MaxRecycledTxBuf = 32; + Instance->Mode.State = EfiSimpleNetworkInitialized; + Instance->Mode.HwAddressSize = NET_ETHER_ADDR_LEN; + Instance->Mode.MediaHeaderSize = NET_ETHER_HEADER_SIZE; + Instance->Mode.MaxPacketSize = 1500; + Instance->Mode.MaxMCastFilterCount = MAX_MCAST_FILTER_CNT; + Instance->Mode.IfType = NET_IFTYPE_ETHERNET; Instance->Mode.MediaPresentSupported = TRUE; - Instance->Mode.MediaPresent = TRUE; + Instance->Mode.MediaPresent = TRUE; // // Allocate the RecycledTxBuf. @@ -856,7 +856,6 @@ WinNtInitializeInstanceData ( // CopyMem (&Instance->InterfaceInfo, NetInfo, sizeof (Instance->InterfaceInfo)); - // // Set broadcast address // @@ -865,8 +864,8 @@ WinNtInitializeInstanceData ( // // Copy Current/PermanentAddress MAC address // - CopyMem (&Instance->Mode.CurrentAddress, &Instance->InterfaceInfo.MacAddr, sizeof(Instance->Mode.CurrentAddress)); - CopyMem (&Instance->Mode.PermanentAddress, &Instance->InterfaceInfo.MacAddr, sizeof(Instance->Mode.PermanentAddress)); + CopyMem (&Instance->Mode.CurrentAddress, &Instance->InterfaceInfo.MacAddr, sizeof (Instance->Mode.CurrentAddress)); + CopyMem (&Instance->Mode.PermanentAddress, &Instance->InterfaceInfo.MacAddr, sizeof (Instance->Mode.PermanentAddress)); // // Since the fake SNP is based on a real NIC, to avoid conflict with the host @@ -892,20 +891,20 @@ WinNtInitializeInstanceData ( **/ EFI_STATUS WintNtInitializeNetUtilityData ( - IN OUT WIN_NT_SNP_PRIVATE *Private, + IN OUT WIN_NT_SNP_PRIVATE *Private, IN UINT8 ActiveInstance ) { - EFI_STATUS Status; - CHAR16 *DllFileNameU; - INT32 ReturnValue; - BOOLEAN NetUtilityLibInitDone; - NT_NET_INTERFACE_INFO NetInterfaceInfoBuffer[MAX_INTERFACE_INFO_NUMBER]; - UINT32 InterfaceCount; - UINT8 ActiveInterfaceIndex; + EFI_STATUS Status; + CHAR16 *DllFileNameU; + INT32 ReturnValue; + BOOLEAN NetUtilityLibInitDone; + NT_NET_INTERFACE_INFO NetInterfaceInfoBuffer[MAX_INTERFACE_INFO_NUMBER]; + UINT32 InterfaceCount; + UINT8 ActiveInterfaceIndex; if (Private == NULL) { - return EFI_INVALID_PARAMETER; + return EFI_INVALID_PARAMETER; } NetUtilityLibInitDone = FALSE; @@ -920,31 +919,31 @@ WintNtInitializeNetUtilityData ( return EFI_NOT_FOUND; } - Private->NtNetUtilityTable.Initialize = (NT_NET_INITIALIZE) GetProcAddress (Private->NetworkLibraryHandle, NETWORK_LIBRARY_INITIALIZE); + Private->NtNetUtilityTable.Initialize = (NT_NET_INITIALIZE)GetProcAddress (Private->NetworkLibraryHandle, NETWORK_LIBRARY_INITIALIZE); if (NULL == Private->NtNetUtilityTable.Initialize) { Status = EFI_NOT_FOUND; goto ErrorReturn; } - Private->NtNetUtilityTable.Finalize = (NT_NET_FINALIZE) GetProcAddress (Private->NetworkLibraryHandle, NETWORK_LIBRARY_FINALIZE); + Private->NtNetUtilityTable.Finalize = (NT_NET_FINALIZE)GetProcAddress (Private->NetworkLibraryHandle, NETWORK_LIBRARY_FINALIZE); if (NULL == Private->NtNetUtilityTable.Finalize) { Status = EFI_NOT_FOUND; goto ErrorReturn; } - Private->NtNetUtilityTable.SetReceiveFilter = (NT_NET_SET_RECEIVE_FILTER) GetProcAddress (Private->NetworkLibraryHandle, NETWORK_LIBRARY_SET_RCV_FILTER); + Private->NtNetUtilityTable.SetReceiveFilter = (NT_NET_SET_RECEIVE_FILTER)GetProcAddress (Private->NetworkLibraryHandle, NETWORK_LIBRARY_SET_RCV_FILTER); if (NULL == Private->NtNetUtilityTable.SetReceiveFilter) { Status = EFI_NOT_FOUND; goto ErrorReturn; } - Private->NtNetUtilityTable.Receive = (NT_NET_RECEIVE) GetProcAddress (Private->NetworkLibraryHandle, NETWORK_LIBRARY_RECEIVE); + Private->NtNetUtilityTable.Receive = (NT_NET_RECEIVE)GetProcAddress (Private->NetworkLibraryHandle, NETWORK_LIBRARY_RECEIVE); if (NULL == Private->NtNetUtilityTable.Receive) { Status = EFI_NOT_FOUND; goto ErrorReturn; } - Private->NtNetUtilityTable.Transmit = (NT_NET_TRANSMIT) GetProcAddress (Private->NetworkLibraryHandle, NETWORK_LIBRARY_TRANSMIT); + Private->NtNetUtilityTable.Transmit = (NT_NET_TRANSMIT)GetProcAddress (Private->NetworkLibraryHandle, NETWORK_LIBRARY_TRANSMIT); if (NULL == Private->NtNetUtilityTable.Transmit) { Status = EFI_NOT_FOUND; goto ErrorReturn; @@ -979,7 +978,7 @@ WintNtInitializeNetUtilityData ( // Status = WinNtInitializeInstanceData (&Private->Instance, &NetInterfaceInfoBuffer[ActiveInterfaceIndex]); if (EFI_ERROR (Status)) { - goto ErrorReturn; + goto ErrorReturn; } return EFI_SUCCESS; @@ -987,7 +986,7 @@ WintNtInitializeNetUtilityData ( ErrorReturn: if (Private->Instance.RecycledTxBuf != NULL) { - free (Private->Instance.RecycledTxBuf); + free (Private->Instance.RecycledTxBuf); } if (NetUtilityLibInitDone) { @@ -1011,7 +1010,7 @@ ErrorReturn: **/ EFI_STATUS WintNtReleaseNetUtilityData ( - IN OUT WIN_NT_SNP_PRIVATE *Private + IN OUT WIN_NT_SNP_PRIVATE *Private ) { if (Private == NULL) { @@ -1019,7 +1018,7 @@ WintNtReleaseNetUtilityData ( } if (Private->Instance.RecycledTxBuf != NULL) { - free (Private->Instance.RecycledTxBuf); + free (Private->Instance.RecycledTxBuf); } if (Private->NtNetUtilityTable.Finalize != NULL) { @@ -1031,7 +1030,7 @@ WintNtReleaseNetUtilityData ( return EFI_SUCCESS; } -EMU_SNP_PROTOCOL mWinNtSnpProtocol = { +EMU_SNP_PROTOCOL mWinNtSnpProtocol = { WinNtSnpCreateMapping, WinNtSnpStart, WinNtSnpStop, @@ -1061,7 +1060,7 @@ EMU_SNP_PROTOCOL mWinNtSnpProtocol = { **/ EFI_STATUS WinNtSnpThunkOpen ( - IN EMU_IO_THUNK_PROTOCOL *This + IN EMU_IO_THUNK_PROTOCOL *This ) { WIN_NT_SNP_PRIVATE *Private; @@ -1089,7 +1088,7 @@ WinNtSnpThunkOpen ( This->Interface = &Private->EmuSnp; This->Private = Private; - if (This->ConfigString != NULL && This->ConfigString[0] != '\0') { + if ((This->ConfigString != NULL) && (This->ConfigString[0] != '\0')) { HostInterfaceIndex = (UINT8)StrDecimalToUintn (This->ConfigString); } @@ -1108,7 +1107,7 @@ WinNtSnpThunkOpen ( **/ EFI_STATUS WinNtSnpThunkClose ( - IN EMU_IO_THUNK_PROTOCOL *This + IN EMU_IO_THUNK_PROTOCOL *This ) { WIN_NT_SNP_PRIVATE *Private; @@ -1124,7 +1123,7 @@ WinNtSnpThunkClose ( return EFI_SUCCESS; } -EMU_IO_THUNK_PROTOCOL mWinNtSnpThunkIo = { +EMU_IO_THUNK_PROTOCOL mWinNtSnpThunkIo = { &gEmuSnpProtocolGuid, NULL, NULL, diff --git a/EmulatorPkg/Win/Host/WinThunk.c b/EmulatorPkg/Win/Host/WinThunk.c index a77be2a64b..008e5755db 100644 --- a/EmulatorPkg/Win/Host/WinThunk.c +++ b/EmulatorPkg/Win/Host/WinThunk.c @@ -32,33 +32,32 @@ Abstract: UINTN SecWriteStdErr ( - IN UINT8 *Buffer, - IN UINTN NumberOfBytes + IN UINT8 *Buffer, + IN UINTN NumberOfBytes ) { - BOOL Success; - DWORD CharCount; + BOOL Success; + DWORD CharCount; CharCount = (DWORD)NumberOfBytes; - Success = WriteFile ( - GetStdHandle (STD_ERROR_HANDLE), - Buffer, - CharCount, - &CharCount, - NULL - ); + Success = WriteFile ( + GetStdHandle (STD_ERROR_HANDLE), + Buffer, + CharCount, + &CharCount, + NULL + ); return Success ? CharCount : 0; } - EFI_STATUS SecConfigStdIn ( VOID ) { - BOOL Success; - DWORD Mode; + BOOL Success; + DWORD Mode; Success = GetConsoleMode (GetStdHandle (STD_INPUT_HANDLE), &Mode); if (Success) { @@ -67,17 +66,17 @@ SecConfigStdIn ( // Mode &= ~(ENABLE_LINE_INPUT | ENABLE_ECHO_INPUT | ENABLE_MOUSE_INPUT | ENABLE_WINDOW_INPUT); -#if defined(NTDDI_VERSION) && defined (NTDDI_WIN10_TH2) && (NTDDI_VERSION > NTDDI_WIN10_TH2) + #if defined (NTDDI_VERSION) && defined (NTDDI_WIN10_TH2) && (NTDDI_VERSION > NTDDI_WIN10_TH2) // // Enable virtual terminal input for Win10 above TH2 // Mode |= ENABLE_VIRTUAL_TERMINAL_INPUT; -#endif + #endif Success = SetConsoleMode (GetStdHandle (STD_INPUT_HANDLE), Mode); } -#if defined(NTDDI_VERSION) && defined (NTDDI_WIN10_TH2) && (NTDDI_VERSION > NTDDI_WIN10_TH2) + #if defined (NTDDI_VERSION) && defined (NTDDI_WIN10_TH2) && (NTDDI_VERSION > NTDDI_WIN10_TH2) // // Enable terminal mode for Win10 above TH2 // @@ -85,32 +84,33 @@ SecConfigStdIn ( Success = GetConsoleMode (GetStdHandle (STD_OUTPUT_HANDLE), &Mode); if (Success) { Success = SetConsoleMode ( - GetStdHandle (STD_OUTPUT_HANDLE), - Mode | ENABLE_VIRTUAL_TERMINAL_PROCESSING | DISABLE_NEWLINE_AUTO_RETURN - ); + GetStdHandle (STD_OUTPUT_HANDLE), + Mode | ENABLE_VIRTUAL_TERMINAL_PROCESSING | DISABLE_NEWLINE_AUTO_RETURN + ); } } -#endif + + #endif return Success ? EFI_SUCCESS : EFI_DEVICE_ERROR; } UINTN SecWriteStdOut ( - IN UINT8 *Buffer, - IN UINTN NumberOfBytes + IN UINT8 *Buffer, + IN UINTN NumberOfBytes ) { - BOOL Success; - DWORD CharCount; + BOOL Success; + DWORD CharCount; CharCount = (DWORD)NumberOfBytes; - Success = WriteFile ( - GetStdHandle (STD_OUTPUT_HANDLE), - Buffer, - CharCount, - &CharCount, - NULL - ); + Success = WriteFile ( + GetStdHandle (STD_OUTPUT_HANDLE), + Buffer, + CharCount, + &CharCount, + NULL + ); return Success ? CharCount : 0; } @@ -120,34 +120,35 @@ SecPollStdIn ( VOID ) { - BOOL Success; - INPUT_RECORD Record; - DWORD RecordNum; + BOOL Success; + INPUT_RECORD Record; + DWORD RecordNum; do { Success = GetNumberOfConsoleInputEvents (GetStdHandle (STD_INPUT_HANDLE), &RecordNum); if (!Success || (RecordNum == 0)) { break; } + Success = PeekConsoleInput ( - GetStdHandle (STD_INPUT_HANDLE), - &Record, - 1, - &RecordNum - ); + GetStdHandle (STD_INPUT_HANDLE), + &Record, + 1, + &RecordNum + ); if (Success && (RecordNum == 1)) { - if (Record.EventType == KEY_EVENT && Record.Event.KeyEvent.bKeyDown) { + if ((Record.EventType == KEY_EVENT) && Record.Event.KeyEvent.bKeyDown) { return TRUE; } else { // // Consume the non-key event. // Success = ReadConsoleInput ( - GetStdHandle (STD_INPUT_HANDLE), - &Record, - 1, - &RecordNum - ); + GetStdHandle (STD_INPUT_HANDLE), + &Record, + 1, + &RecordNum + ); } } } while (Success); @@ -157,37 +158,38 @@ SecPollStdIn ( UINTN SecReadStdIn ( - IN UINT8 *Buffer, - IN UINTN NumberOfBytes + IN UINT8 *Buffer, + IN UINTN NumberOfBytes ) { - BOOL Success; - INPUT_RECORD Record; - DWORD RecordNum; - UINTN BytesReturn; + BOOL Success; + INPUT_RECORD Record; + DWORD RecordNum; + UINTN BytesReturn; if (!SecPollStdIn ()) { return 0; } + Success = ReadConsoleInput ( - GetStdHandle (STD_INPUT_HANDLE), - &Record, - 1, - &RecordNum - ); + GetStdHandle (STD_INPUT_HANDLE), + &Record, + 1, + &RecordNum + ); ASSERT (Success && (RecordNum == 1) && (Record.EventType == KEY_EVENT) && (Record.Event.KeyEvent.bKeyDown)); NumberOfBytes = MIN (Record.Event.KeyEvent.wRepeatCount, NumberOfBytes); BytesReturn = NumberOfBytes; while (NumberOfBytes-- != 0) { Buffer[NumberOfBytes] = Record.Event.KeyEvent.uChar.AsciiChar; } + return BytesReturn; } - VOID * SecAlloc ( - IN UINTN Size + IN UINTN Size ) { return malloc ((size_t)Size); @@ -195,7 +197,7 @@ SecAlloc ( BOOLEAN SecFree ( - IN VOID *Ptr + IN VOID *Ptr ) { if (EfiSystemMemoryRange (Ptr)) { @@ -208,13 +210,11 @@ SecFree ( return TRUE; } - - // // Define a global that we can use to shut down the NT timer thread when // the timer is canceled. // -BOOLEAN mCancelTimerThread = FALSE; +BOOLEAN mCancelTimerThread = FALSE; // // The notification function to call on every timer interrupt @@ -224,41 +224,40 @@ EMU_SET_TIMER_CALLBACK *mTimerNotifyFunction = NULL; // // The thread handle for this driver // -HANDLE mNtMainThreadHandle; +HANDLE mNtMainThreadHandle; // // The timer value from the last timer interrupt // -UINT32 mNtLastTick; +UINT32 mNtLastTick; // // Critical section used to update varibles shared between the main thread and // the timer interrupt thread. // -CRITICAL_SECTION mNtCriticalSection; +CRITICAL_SECTION mNtCriticalSection; // // Worker Functions // -UINT mMMTimerThreadID = 0; +UINT mMMTimerThreadID = 0; -volatile BOOLEAN mInterruptEnabled = FALSE; +volatile BOOLEAN mInterruptEnabled = FALSE; VOID CALLBACK MMTimerThread ( - UINT wTimerID, - UINT msg, - DWORD dwUser, - DWORD dw1, - DWORD dw2 -) + UINT wTimerID, + UINT msg, + DWORD dwUser, + DWORD dw1, + DWORD dw2 + ) { - UINT32 CurrentTick; - UINT32 Delta; + UINT32 CurrentTick; + UINT32 Delta; if (!mCancelTimerThread) { - // // Suspend the main thread until we are done. // Enter the critical section before suspending @@ -306,14 +305,13 @@ MMTimerThread ( // Get the current system tick // CurrentTick = GetTickCount (); - Delta = CurrentTick - mNtLastTick; + Delta = CurrentTick - mNtLastTick; mNtLastTick = CurrentTick; // // If delay was more then 1 second, ignore it (probably debugging case) // if (Delta < 1000) { - // // Only invoke the callback function if a Non-NULL handler has been // registered. Assume all other handlers are legal. @@ -332,18 +330,17 @@ MMTimerThread ( timeKillEvent (wTimerID); mMMTimerThreadID = 0; } - } VOID SecSetTimer ( IN UINT64 TimerPeriod, IN EMU_SET_TIMER_CALLBACK Callback -) + ) { // -// If TimerPeriod is 0, then the timer thread should be canceled -// + // If TimerPeriod is 0, then the timer thread should be canceled + // if (TimerPeriod == 0) { // // Cancel the timer thread @@ -384,23 +381,24 @@ SecSetTimer ( SetThreadPriority ( GetCurrentThread (), THREAD_PRIORITY_HIGHEST - ); + ); mMMTimerThreadID = timeSetEvent ( - (UINT)TimerPeriod, - 0, - MMTimerThread, - (DWORD_PTR)NULL, - TIME_PERIODIC | TIME_KILL_SYNCHRONOUS | TIME_CALLBACK_FUNCTION - ); + (UINT)TimerPeriod, + 0, + MMTimerThread, + (DWORD_PTR)NULL, + TIME_PERIODIC | TIME_KILL_SYNCHRONOUS | TIME_CALLBACK_FUNCTION + ); } + mTimerNotifyFunction = Callback; } VOID SecInitializeThunk ( VOID -) + ) { InitializeCriticalSection (&mNtCriticalSection); @@ -412,7 +410,7 @@ SecInitializeThunk ( 0, FALSE, DUPLICATE_SAME_ACCESS - ); + ); } VOID @@ -423,7 +421,6 @@ SecEnableInterrupt ( mInterruptEnabled = TRUE; } - VOID SecDisableInterrupt ( VOID @@ -432,7 +429,6 @@ SecDisableInterrupt ( mInterruptEnabled = FALSE; } - UINT64 SecQueryPerformanceFrequency ( VOID @@ -450,17 +446,14 @@ SecQueryPerformanceCounter ( return 0; } - - VOID SecSleep ( - IN UINT64 Nanoseconds + IN UINT64 Nanoseconds ) { Sleep ((DWORD)DivU64x32 (Nanoseconds, 1000000)); } - VOID SecCpuSleep ( VOID @@ -469,40 +462,38 @@ SecCpuSleep ( Sleep (1); } - VOID SecExit ( - UINTN Status + UINTN Status ) { exit ((int)Status); } - VOID SecGetTime ( - OUT EFI_TIME *Time, - OUT EFI_TIME_CAPABILITIES *Capabilities OPTIONAL + OUT EFI_TIME *Time, + OUT EFI_TIME_CAPABILITIES *Capabilities OPTIONAL ) { - SYSTEMTIME SystemTime; - TIME_ZONE_INFORMATION TimeZone; + SYSTEMTIME SystemTime; + TIME_ZONE_INFORMATION TimeZone; GetLocalTime (&SystemTime); GetTimeZoneInformation (&TimeZone); - Time->Year = (UINT16)SystemTime.wYear; - Time->Month = (UINT8)SystemTime.wMonth; - Time->Day = (UINT8)SystemTime.wDay; - Time->Hour = (UINT8)SystemTime.wHour; - Time->Minute = (UINT8)SystemTime.wMinute; - Time->Second = (UINT8)SystemTime.wSecond; + Time->Year = (UINT16)SystemTime.wYear; + Time->Month = (UINT8)SystemTime.wMonth; + Time->Day = (UINT8)SystemTime.wDay; + Time->Hour = (UINT8)SystemTime.wHour; + Time->Minute = (UINT8)SystemTime.wMinute; + Time->Second = (UINT8)SystemTime.wSecond; Time->Nanosecond = (UINT32)(SystemTime.wMilliseconds * 1000000); - Time->TimeZone = (INT16)TimeZone.Bias; + Time->TimeZone = (INT16)TimeZone.Bias; if (Capabilities != NULL) { Capabilities->Resolution = 1; - Capabilities->Accuracy = 50000000; + Capabilities->Accuracy = 50000000; Capabilities->SetsToZero = FALSE; } @@ -514,30 +505,30 @@ SecGetTime ( EFI_STATUS SecSetTime ( - IN EFI_TIME *Time + IN EFI_TIME *Time ) { - TIME_ZONE_INFORMATION TimeZone; - SYSTEMTIME SystemTime; - BOOL Flag; + TIME_ZONE_INFORMATION TimeZone; + SYSTEMTIME SystemTime; + BOOL Flag; // // Set Daylight savings time information and Time Zone // GetTimeZoneInformation (&TimeZone); TimeZone.StandardDate.wMonth = Time->Daylight; - TimeZone.Bias = Time->TimeZone; - Flag = SetTimeZoneInformation (&TimeZone); + TimeZone.Bias = Time->TimeZone; + Flag = SetTimeZoneInformation (&TimeZone); if (!Flag) { return EFI_DEVICE_ERROR; } - SystemTime.wYear = Time->Year; - SystemTime.wMonth = Time->Month; - SystemTime.wDay = Time->Day; - SystemTime.wHour = Time->Hour; - SystemTime.wMinute = Time->Minute; - SystemTime.wSecond = Time->Second; + SystemTime.wYear = Time->Year; + SystemTime.wMonth = Time->Month; + SystemTime.wDay = Time->Day; + SystemTime.wHour = Time->Hour; + SystemTime.wMinute = Time->Minute; + SystemTime.wSecond = Time->Second; SystemTime.wMilliseconds = (INT16)(Time->Nanosecond / 1000000); Flag = SetLocalTime (&SystemTime); @@ -549,7 +540,7 @@ SecSetTime ( } } -EMU_THUNK_PROTOCOL gEmuThunkProtocol = { +EMU_THUNK_PROTOCOL gEmuThunkProtocol = { SecWriteStdErr, SecConfigStdIn, SecWriteStdOut, @@ -574,7 +565,5 @@ EMU_THUNK_PROTOCOL gEmuThunkProtocol = { GetNextThunkProtocol }; - #pragma warning(default : 4996) #pragma warning(default : 4232) - -- cgit v1.2.3