Subversion Repositories Kolibri OS

Rev

Rev 890 | Rev 897 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
890 serge 1
 
2
#include 
3
#include 
4
#include 
5
#include 
6
#include 
7
#include 
892 serge 8
890 serge 9
 
892 serge 10
890 serge 11
 
892 serge 12
890 serge 13
 
892 serge 14
{
890 serge 15
    char *p;
892 serge 16
    unsigned char c;
17
890 serge 18
 
892 serge 19
    while( (c = *p) )
20
    {
890 serge 21
        if( c >= 'a' && c <= 'z' )
892 serge 22
            *p = c - 'a' + 'A';
23
        ++p;
24
    }
25
890 serge 26
 
892 serge 27
}
28
890 serge 29
 
892 serge 30
{
890 serge 31
    PIMAGE_DOS_HEADER        dos;
892 serge 32
    PIMAGE_NT_HEADERS32      nt;
33
    PIMAGE_EXPORT_DIRECTORY  exp;
34
890 serge 35
 
892 serge 36
    nt  =  MakePtr( PIMAGE_NT_HEADERS32, dos, dos->e_lfanew);
37
    exp =  MakePtr(PIMAGE_EXPORT_DIRECTORY,LOAD_BASE,
38
                   nt->OptionalHeader.DataDirectory[0].VirtualAddress);
39
890 serge 40
 
892 serge 41
890 serge 42
 
892 serge 43
    core_dll.img_size = nt->OptionalHeader.SizeOfImage;
44
    core_dll.img_md   = NULL;
45
890 serge 46
 
892 serge 47
    core_dll.img_sec  = MakePtr(PIMAGE_SECTION_HEADER,nt, sizeof(IMAGE_NT_HEADERS32));
48
    core_dll.img_exp  = MakePtr(PIMAGE_EXPORT_DIRECTORY,LOAD_BASE,
49
                        nt->OptionalHeader.DataDirectory[0].VirtualAddress);
50
    core_dll.img_name = strupr(MakePtr(char*, LOAD_BASE, exp->Name));
51
890 serge 52
 
892 serge 53
        core_dll.img_name, core_dll.img_base,
54
        core_dll.img_size, nt->FileHeader.NumberOfSections,
55
        core_dll.img_exp );
56
};
57
890 serge 58
 
59
 
892 serge 60
{
890 serge 61
    dll_t* dll = &core_dll;
892 serge 62
890 serge 63
 
892 serge 64
    {
65
        if( !strncmp(name,dll->img_name,16))
66
            return dll;
67
890 serge 68
 
892 serge 69
890 serge 70
 
892 serge 71
890 serge 72
 
892 serge 73
};
890 serge 74
75
 
76
 
77
{
78
  char         srv_name[16];  //        ASCIIZ string
79
  u32_t        magic;         // +0x10  'SRV '
80
  size_t       size;          // +0x14  size of structure SRV
81
  void        *fd;            // +0x18  next SRV descriptor
82
  void        *bk;            // +0x1C  prev SRV descriptor
83
  addr_t       base;          // +0x20  service base address
84
  addr_t       entry;         // +0x24  service START function
85
  void        *srv_proc;      // +0x28  main service handler
86
}srv_t;
87
88
 
89
90
 
91
{
92
    PIMAGE_DOS_HEADER     dos;
93
    PIMAGE_NT_HEADERS32   nt;
94
95
 
96
    md_t          *md;
97
    srv_t         *srv;
98
99
 
100
101
 
102
        return 0;
103
104
 
892 serge 105
    {
890 serge 106
        dos = (PIMAGE_DOS_HEADER)md->base;
892 serge 107
        nt =  MakePtr( PIMAGE_NT_HEADERS32, dos, dos->e_lfanew);
108
890 serge 109
 
892 serge 110
                            nt->OptionalHeader.AddressOfEntryPoint);
111
890 serge 112
 
892 serge 113
890 serge 114
 
892 serge 115
            srv->entry = nt->OptionalHeader.AddressOfEntryPoint + md->base;
116
890 serge 117
 
892 serge 118
    }
890 serge 119
    else
892 serge 120
    {
890 serge 121
        md_free( md );
892 serge 122
        return NULL;
890 serge 123
    }
124
}
892 serge 125