FILEMUIINFO Structure

drjackool 956 Reputation points
2021-01-22T07:45:54.633+00:00

Hi
I want to get MUI file information directly from a .mui file type (without GetFileMUIInfo function) and I found following structure but some members of
it is missed. Where is complete structure?

typedef struct _FILEMUIINFO {
  DWORD dwSize;
  DWORD dwVersion;
  DWORD dwFileType;
  BYTE  pChecksum[16];
  BYTE  pServiceChecksum[16];
  DWORD dwLanguageNameOffset;
  DWORD dwTypeIDMainSize;
  DWORD dwTypeIDMainOffset;
  DWORD dwTypeNameMainOffset;
  DWORD dwTypeIDMUISize;
  DWORD dwTypeIDMUIOffset;
  DWORD dwTypeNameMUIOffset;
  BYTE  abBuffer[8];
} FILEMUIINFO, *PFILEMUIINFO;

Thanks

Windows API - Win32
Windows API - Win32
A core set of Windows application programming interfaces (APIs) for desktop and server applications. Previously known as Win32 API.
2,440 questions
C++
C++
A high-level, general-purpose programming language, created as an extension of the C programming language, that has object-oriented, generic, and functional features in addition to facilities for low-level memory manipulation.
3,553 questions
0 comments No comments
{count} votes

Accepted answer
  1. drjackool 956 Reputation points
    2021-01-25T09:04:01.143+00:00

    By searching and parsing I found this struct and works fine :-)

    typedef struct _MUIINFO {
     DWORD dwSignature;
     DWORD       dwSize;
     DWORD       dwVersion;
     DWORD      unknow1; // maybe for alignment
     DWORD       dwFileType;
     DWORD dwSystemAttributes;
     DWORD dwUltimateFallbackLocation;
     BYTE        pServiceChecksum[16];
     BYTE        pChecksum[16];
     DWORD  unknow2[6];
    
     DWORD       dwTypeNameMainOffset;
     DWORD dwTypeNameMainSize;
     DWORD       dwTypeIDMainOffset;
     DWORD       dwTypeIDMainSize;
    
     DWORD       dwTypeNameMUIOffset;
     DWORD dwTypeNameMUISize;
     DWORD       dwTypeIDMUIOffset;
     DWORD       dwTypeIDMUISize;
    
     DWORD       dwLanguageNameOffset;
     DWORD       dwLanguageNameSize;
    
     DWORD       dwUltimateFallbackLanguageOffset;
     DWORD       dwUltimateFallbackLanguageSize;
    } MUIINFO, * PMUIINFO;
    
    0 comments No comments

3 additional answers

Sort by: Most helpful
  1. Drake Wu - MSFT 991 Reputation points
    2021-01-22T09:52:56.48+00:00

    Hi @drjackool FILEMUIINFO structure is only used for GetFileMUIInfo function.
    For .mui format, you can view the output example shown in this document: Examples for Using MUIRCT:

    Here is an example of the resource configuration data output from a .mui file, Shell32.dll.mui, using the -d switch for MUIRCT:

    C++

    Signature          -    fecdfecd  
    Length             -     c8  
    RC Config Version  -    10000  
    FileType           -    12  
    SystemAttributes   -    100  
    Service Checksum   -    14f44a8d86bef14af26d9a885964c935  
    Checksum           -    f5b3b7ab330439d6fcc07582c3afb613  
    MainNameTypes      -    MUI  
    MainIDTypes        -    2 3 4 5 6 9 14 16  
    Language           -    en-US  
    

    If the answer is helpful, please click "Accept Answer" and upvote it.
    Note: Please follow the steps in our documentation to enable e-mail notifications if you want to receive the related email notification for this thread.

    1 person found this answer helpful.

  2. Castorix31 81,941 Reputation points
    2021-01-22T08:13:53.983+00:00

    Structure from MSDN FILEMUIINFO structure
    is same as in winnls.h :

    //  
    // Information about a MUI file, used as input/output in GetFileMUIInfo  
    // All offsets are relative to start of the structure. Offsets with value 0 mean empty field.  
    //  
      
    typedef struct _FILEMUIINFO {  
        DWORD       dwSize;                 // Size of the structure including buffer size [in]  
        DWORD       dwVersion;              // Version of the structure [in]  
        DWORD       dwFileType;             // Type of the file [out]  
        BYTE        pChecksum[16];          // Checksum of the file [out]  
        BYTE        pServiceChecksum[16];   // Checksum of the file [out]  
        DWORD       dwLanguageNameOffset;   // Language name of the file [out]  
        DWORD       dwTypeIDMainSize;       // Number of TypeIDs in main module [out]  
        DWORD       dwTypeIDMainOffset;     // Array of TypeIDs (DWORD) in main module [out]  
        DWORD       dwTypeNameMainOffset;   // Multistring array of TypeNames in main module [out]  
        DWORD       dwTypeIDMUISize;        // Number of TypeIDs in MUI module [out]  
        DWORD       dwTypeIDMUIOffset;      // Array of TypeIDs (DWORD) in MUI module [out]  
        DWORD       dwTypeNameMUIOffset;    // Multistring array of TypeNames in MUI module [out]  
        BYTE        abBuffer[8];             // Buffer for extra data [in] (Size 4 is for padding)  
    } FILEMUIINFO, *PFILEMUIINFO;  
    

  3. drjackool 956 Reputation points
    2021-01-22T09:01:00.083+00:00

    Screen-shot of hex dump:
    59572-screenshot-2021-01-22-122949.png

    CDFE CDFE is Signature (DWORD)
    6001 0000 is dwSize, correct
    0000 0100 is dwVersion, correct
    0000 0000 should be dwFileType but it is incorrect!

    0 comments No comments