summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAmlal <amlal@el-mahrouss-logic.com>2024-09-08 12:08:13 +0200
committerAmlal <amlal@el-mahrouss-logic.com>2024-09-08 12:08:13 +0200
commit49df5ae7f4475695e04567771dffe50292e695de (patch)
treef354aae36ea555972020ea9ea6a263e42a48b78d
parentdf8a42aa1266d953a9ee473afe9f6349bd1837c7 (diff)
[ IMP ] DDK Model improvements and reworked the drvsign tool.
Signed-off-by: Amlal <amlal@el-mahrouss-logic.com>
-rw-r--r--dev/DDK/DispatchKernelCall.S2
-rw-r--r--dev/DDK/KernelAlloc.c4
-rw-r--r--dev/DDK/KernelCall.c6
-rw-r--r--dev/DDK/KernelDev.c4
-rw-r--r--dev/DDK/KernelDev.h12
-rw-r--r--dev/DDK/KernelPrint.c2
-rw-r--r--tools/drvsign.cxx16
7 files changed, 23 insertions, 23 deletions
diff --git a/dev/DDK/DispatchKernelCall.S b/dev/DDK/DispatchKernelCall.S
index ef1886b9..3a9a57b5 100644
--- a/dev/DDK/DispatchKernelCall.S
+++ b/dev/DDK/DispatchKernelCall.S
@@ -30,7 +30,7 @@ __KernelCallDispatch:
/* args x0, x8, x9, x10, x11 is kept to tell that this is a Kernel call */
__KernelCallDispatch:
/* There is no specific interrupt request id for a system call in ARM64 as well. */
- mov x11, #0x33
+ mov x9, #0x33
svc #0
#endif
diff --git a/dev/DDK/KernelAlloc.c b/dev/DDK/KernelAlloc.c
index 75aa3213..7648712d 100644
--- a/dev/DDK/KernelAlloc.c
+++ b/dev/DDK/KernelAlloc.c
@@ -18,7 +18,7 @@ DK_EXTERN void* KernelAlloc(size_t sz)
if (!sz)
++sz;
- void* ptr = KernelCall("NewHeap", 1, &sz, sizeof(size_t));
+ void* ptr = KernelCall("MmNewKeHeap", 1, &sz, sizeof(size_t));
return ptr;
}
@@ -32,5 +32,5 @@ DK_EXTERN void KernelFree(void* ptr)
if (!ptr)
return;
- KernelCall("DeleteHeap", 1, ptr, 0);
+ KernelCall("MmDeleteKeHeap", 1, ptr, 0);
}
diff --git a/dev/DDK/KernelCall.c b/dev/DDK/KernelCall.c
index 31e67620..16c36f43 100644
--- a/dev/DDK/KernelCall.c
+++ b/dev/DDK/KernelCall.c
@@ -32,7 +32,7 @@ DK_EXTERN void* KernelCall(const char* KernelRpcName, int32_t cnt, void* data, s
/// @param slotFn, syscall slot.
DK_EXTERN void KernelAddSyscall(const int slot, void (*slotFn)(void* a0))
{
- KernelCall("AddSyscall", slot, slotFn, 1);
+ KernelCall("IntAddSyscall", slot, slotFn, 1);
}
/// @brief Get a Kernel property.
@@ -41,7 +41,7 @@ DK_EXTERN void KernelAddSyscall(const int slot, void (*slotFn)(void* a0))
/// @return property's object.
DK_EXTERN void* KernelGetProperty(const int slot, const char* name)
{
- return KernelCall("GetProperty", slot, name, 1);
+ return KernelCall("RtlGetProperty", slot, (void*)name, 1);
}
/// @brief Set a Kernel property.
@@ -51,5 +51,5 @@ DK_EXTERN void* KernelGetProperty(const int slot, const char* name)
/// @return property's object.
DK_EXTERN void* KernelSetProperty(const int slot, const struct DDK_PROPERTY_RECORD* ddk_pr)
{
- return KernelCall("SetProperty", slot, ddk_pr, 1);
+ return KernelCall("RtlSetProperty", slot, (void*)ddk_pr, 1);
}
diff --git a/dev/DDK/KernelDev.c b/dev/DDK/KernelDev.c
index 78703961..a04f5986 100644
--- a/dev/DDK/KernelDev.c
+++ b/dev/DDK/KernelDev.c
@@ -15,7 +15,7 @@ DK_EXTERN KERNEL_DEVICE_PTR KernelOpenDevice(const char* devicePath)
if (!devicePath)
return nil;
- return KernelCall("OpenDevice", 1, (void*)devicePath, KernelStringLength(devicePath));
+ return KernelCall("ZkOpenDevice", 1, (void*)devicePath, KernelStringLength(devicePath));
}
/// @brief Close any device.
@@ -25,5 +25,5 @@ DK_EXTERN void KernelCloseDevice(KERNEL_DEVICE_PTR device)
if (!device)
return;
- KernelCall("CloseDevice", 1, device, sizeof(KERNEL_DEVICE));
+ KernelCall("ZkCloseDevice", 1, device, sizeof(KERNEL_DEVICE));
}
diff --git a/dev/DDK/KernelDev.h b/dev/DDK/KernelDev.h
index e051c7a3..17876688 100644
--- a/dev/DDK/KernelDev.h
+++ b/dev/DDK/KernelDev.h
@@ -15,12 +15,12 @@ struct _KERNEL_DEVICE;
/// @brief Kernel Device driver.
typedef struct _KERNEL_DEVICE DK_FINAL
{
- char name[255]; // the device name. Could be /./DEVICE_NAME/
- void* (*read)(void* arg, int len); // read from device.
- void (*write)(void* arg, int len);
- void (*wait)(void); // write to device.
- struct _KERNEL_DEVICE* (*open)(const char* path); // open device.
- void (*close)(struct _KERNEL_DEVICE* dev); // close device.
+ char d_name[255]; // the device name. Could be /./DEVICE_NAME/
+ void* (*d_read)(void* arg, int len); // read from device.
+ void (*d_write)(void* arg, int len);
+ void (*d_wait)(void); // write to device.
+ struct _KERNEL_DEVICE* (*d_open)(const char* path); // open device.
+ void (*d_close)(struct _KERNEL_DEVICE* dev); // close device.
} KERNEL_DEVICE, *KERNEL_DEVICE_PTR;
/// @brief Open a new device from path.
diff --git a/dev/DDK/KernelPrint.c b/dev/DDK/KernelPrint.c
index 7eb893d0..77faa8a8 100644
--- a/dev/DDK/KernelPrint.c
+++ b/dev/DDK/KernelPrint.c
@@ -14,7 +14,7 @@ DK_EXTERN void KernelPrintChar(const char ch)
assembled[0] = ch;
assembled[1] = 0;
- KernelCall("WriteCharacter", 1, assembled, 1);
+ KernelCall("SrWriteCharacter", 1, assembled, 1);
}
/// @brief print string to UART.
diff --git a/tools/drvsign.cxx b/tools/drvsign.cxx
index 18678448..95407162 100644
--- a/tools/drvsign.cxx
+++ b/tools/drvsign.cxx
@@ -11,13 +11,13 @@
#include <sstream>
#include <filesystem>
-#define kDriverSignedExt ".vxd"
+#define kDriverSignedExt ".zxd"
#define kDriverExt ".sys"
-#define kSignedDriverMagic " VXD"
+#define kSignedDriverMagic " ZXD"
namespace details
{
- struct SIGNED_DRIVER_HEADER final
+ struct ZKA_DRIVER_HEADER final
{
char d_binary_padding[512];
// doesn't change.
@@ -40,15 +40,15 @@ namespace details
}
} // namespace details
-/// @brief This program converts a PE32+ driver, into a custom format, the SIGG.
-/// @note SIGG is used to tell that we're dealing with a ZKA driver.
+/// @brief This program converts a PE32+ driver, into a custom format, the ZXD.
+/// @note ZXD is a format for ZKA signed drivers.
int main(int argc, char* argv[])
{
for (size_t i = 1ul; i < argc; ++i)
{
if (strcmp(argv[i], "/?") == 0)
{
- std::cout << "drvsign: ZKA Driver Signing Tool.\n";
+ std::cout << "drvsign: ZKA ZKA Driver Tool.\n";
std::cout << "drvsign: © ZKA Technologies, all rights reserved.\n";
return 0;
@@ -59,7 +59,7 @@ int main(int argc, char* argv[])
!std::string(argv[1]).ends_with(kDriverExt))
return -1;
- details::SIGNED_DRIVER_HEADER sig{0};
+ details::ZKA_DRIVER_HEADER sig{0};
sig.d_binary_version = 1;
@@ -97,8 +97,8 @@ int main(int argc, char* argv[])
sig.d_binary_checksum ^= sig.d_binary_size;
+ of_drv.write((char*)&sig, sizeof(details::ZKA_DRIVER_HEADER));
of_drv.write(ss.str().c_str(), ss.str().size());
- of_drv.write((char*)&sig, sizeof(details::SIGNED_DRIVER_HEADER));
std::cout << "drvsign: Signing is done, quiting, here is the key: " << sig.d_binary_checksum << ".\n";