{"id":18374990,"url":"https://github.com/pali/secure-giveio","last_synced_at":"2026-02-23T12:56:28.120Z","repository":{"id":39984566,"uuid":"507309245","full_name":"pali/secure-giveio","owner":"pali","description":"Secure GiveIO NT kernel driver","archived":false,"fork":false,"pushed_at":"2022-06-25T12:47:42.000Z","size":7,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-04-11T04:48:38.786Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Makefile","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pali.png","metadata":{"files":{"readme":"README","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-06-25T12:46:57.000Z","updated_at":"2024-12-02T02:57:54.000Z","dependencies_parsed_at":"2022-09-19T00:00:42.677Z","dependency_job_id":null,"html_url":"https://github.com/pali/secure-giveio","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/pali/secure-giveio","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pali%2Fsecure-giveio","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pali%2Fsecure-giveio/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pali%2Fsecure-giveio/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pali%2Fsecure-giveio/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pali","download_url":"https://codeload.github.com/pali/secure-giveio/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pali%2Fsecure-giveio/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29743661,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-23T07:44:07.782Z","status":"ssl_error","status_checked_at":"2026-02-23T07:44:07.432Z","response_time":90,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-06T00:16:58.760Z","updated_at":"2026-02-23T12:56:28.096Z","avatar_url":"https://github.com/pali.png","language":"Makefile","funding_links":[],"categories":[],"sub_categories":[],"readme":"==== Secure GiveIO NT kernel driver ====\n\nThis is native Windows NT kernel driver giveio.sys which implements GiveIO API\nby Dale Roberts, \"Direct Port I/O and Windows NT\", Dr. Dobb's Journal, May 1996.\n\nThis Secure GiveIO implementation differs from the original implementation\nslightly but API is exactly same and therefore this new implementation can be\nused as a direct replacement for the original one.\n\nDifferences in this Secure GiveIO implementation:\n\n* This implementation is _secure_. It gives direct port I/O access only to\n  privileged processes or threads. Calling thread needs have SeTcbPrivilege\n  (Act as part of the operating system privilege), like NT system call\n  NtSetInformationProcess(ProcessUserModeIOPL) in older NT kernels. Unprivileged\n  processes without SeTcbPrivilege in their access token will not gain direct\n  port I/O access and therefore usage of this kernel driver does not decrease\n  system security for ordinary or guest users. Original implementation gave\n  access to any user process, including unprivileged and so decreased system\n  security.\n\n* This implementation gives direct port I/O access just for the calling thread.\n  Original implementation gave access to all threads from calling process.\n  Reason for this change is simplification of the driver implementation.\n\n* This implementation changes for the calling thread x86 I/O Privilege Level.\n  Original implementation did not change I/O Privilege Level and instead changed\n  bitmap of the x86 Task State Segment for the current process to allow access\n  to the all I/O ports. Changing I/O bitmap in Task State Segment is more\n  complicated and makes more sense only when giving access to just some of I/O\n  ports. Moreover it is not possible in AMD64 NT kernels.\n\n* This implementation works on both IX86 and AMD64 NT systems. Original is\n  IX86-only.\n\n* This implementation can be compiled by MSVC and also by GCC/MinGW.\n  For GCC/MinGW there is separate GNUmakefile with build instructions.\n\n* This implementation has free and open source license.\n\nCopyright, author and license: (c) 2022 Pali Rohár \u003cpali@kernel.org\u003e, GPLv2+\n\n== Compilation with MSVC ==\n\nEnsure that nmake.exe, cl.exe and link.exe are in PATH. And that Windows DDK is\ninstalled and _BUILDARCH, SDK_INC_PATH, CRT_INC_PATH, DDK_INC_PATH and\nDDK_LIB_PATH env variables are correctly set.\n\nCompilation from DDK console is simple, just call:\n\n  nmake\n\nOutside of the DDK console choose correct values for target architecture, e.g.:\n\n  nmake _BUILDARCH=x86 SDK_INC_PATH=..\\inc\\api CRT_INC_PATH=..\\inc\\crt DDK_INC_PATH=..\\inc\\ddk DDK_LIB_PATH=..\\lib\\i386\n\n  nmake _BUILDARCH=AMD64 SDK_INC_PATH=..\\inc\\api CRT_INC_PATH=..\\inc\\crt DDK_INC_PATH=..\\inc\\ddk DDK_LIB_PATH=..\\lib\\amd64\n\n== Compilation with GCC ==\n\nEnsure that MinGW or MinGW-w64 is installed and correct GCC is set in CC env\nvariable. Also ensure that build system has installed Perl interpreter and is in\nPATH. Perl interpreter is needed for post fixup script to workaround GCC bugs.\n\nWhen default system compiler is the correct one then just call:\n\n  make\n\nWhen cross compiling or default system compiler is not the correct one then call\nmake with correct compiler for chosen target architecture, e.g.:\n\n  make CC=i686-w64-mingw32-gcc\n\n  make CC=x86_64-w64-mingw32-gcc\n\nNote that compilation with GCC is experimental due to bugs in GCC and GNU LD\nlinker. Workarounds are provided via linker scripts and post fixup script.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpali%2Fsecure-giveio","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpali%2Fsecure-giveio","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpali%2Fsecure-giveio/lists"}