Difference between revisions of "Reference"

From ReactOS Wiki
Jump to: navigation, search
(Pre-NT Generation)
(Online: added ntinternals.net, fixed 3 dead links)
(23 intermediate revisions by 10 users not shown)
Line 1: Line 1:
<b>This is a work in progress by Z98</b>
+
This page contains a list of reference materials separated by topic.  Most are relevant to ReactOS development and several others are related to Microsoft(C) technologies.  They have been separated by category so you can better choose what materials are of interest to you.  Some duplication of links may happen if the need to put them into two categories arose.
  
This page contains a list of reference materials separated by topic.  Most are relevant to ReactOS development and several others are related to Microsoft(C) technologies.  They have been separated by category so you can better choose what materials are of interest to you.  Some duplication of links may happen if the need arises to put them into two categories.
+
== Programming ==
  
=Programming=
+
Before you can begin programming an operating system, you need to know how to program.  The following are references and tutorials that one can use to learn various principles.  As ReactOS primarily uses C, C++, and Assembly, we will only cover those in this section.  The Assembly languages we will cover will be for Intel/AMD and PowerPC, as those are the only architectures ReactOS has code for.  For C# and .NET related matters, scroll downwards.  Each reference will be ranked as Introductory, Intermediate, or Advanced.  Introductory assumes no knowledge of programming, Intermediate assumes you know how to use the language in question, and Advanced covers some of the more tricky topics in programming.  Some may be more than one and a rare few will cover topics from all three.
  
Before you can begin programming an operating system, you need to know how to programThe following are references and tutorials that one can use to learn various principlesAs ReactOS uses primary C, C++, and Assembly, we will only cover those in this sectionThe Assembly languages we will cover will be for Intel/AMD and PowerPC, as those are the only architectures ReactOS has code for. For C# and .NET related matters, scroll downwardsEach reference will be ranked as Introductory, Intermediate, or AdvancedIntroductory assumes no knowledge of programming, Intermediate assumes you know how to use the language in question, and Advanced covers some of the more tricky topics in programming. Some may be more than one and a rare few will cover topics from all three.
+
=== Online ===
 +
{| class="wikitable"
 +
! Description
 +
! Website
 +
! Level
 +
|-
 +
| A general C++ tutorial that covers the first basic program to more advanced topics like templates.
 +
| [http://www.cplusplus.com/doc/tutorial/ visit]
 +
| Introductory / Intermediate
 +
|-
 +
| This tutorial is huge.  It covers a large range of topics in C programming and focuses a lot on its use on UNIX platforms.  However, in doing so, it also teaches you a lot about what C is capable of and how it's used in an operating system.
 +
| [http://www.cs.cf.ac.uk/Dave/C/ visit]
 +
| Introductory / Intermediate / Advanced
 +
|-
 +
| Pointers are some of the trickiest things to work with in C/C++.  This tutorial provides examples of various techniques that take advantage of them.
 +
| [http://www.newty.de/fpt/index.html visit]
 +
| Intermediate / Advanced
 +
|-
 +
| A very nice reference to the C and C++ Standard Libraries.  In order to do anything substantial or even trivial, you're likely to be using things from the Standard Libraries.
 +
| [http://www.cppreference.com/index.html visit]
 +
| Intermediate / Advanced
 +
|-
 +
| rowspan="3" | An introduction to IBM's PowerPC.  If you've never seen assembly code before, I'd advise you start with learning the assembly for a RISC architecture like the PPCGood PPC tutorials can actually be hard to come by, but these should get you started.
 +
| [http://www.ibm.com/developerworks/library/l-ppc/ visit]
 +
| Intermediate
 +
|-
 +
| [http://www.lightsoft.co.uk/Fantasm/Beginners/begin1.html visit]
 +
| Intermediate
 +
|-
 +
| [http://home-3.tiscali.nl/~solognt/codingstuff/ppc_cursus.html visit]
 +
| Intermediate
 +
|-
 +
| rowspan="2" | These two are guides to Intel's assembly language.  Both have their strengths and weaknesses, but they seem to complement each other well.
 +
| [http://www.drpaulcarter.com/pcasm/index.php visit]
 +
| Intermediate
 +
|-
 +
| [http://savannah.nongnu.org/projects/pgubook/ visit]
 +
| Intermediate
 +
|-
 +
| rowspan="2" | Registers on Intel's architecture have a somewhat contrived naming convention compared to RISC architecturesThese two references provide a breakdown of what they are and how they're used.
 +
| [http://www.swansontec.com/sregisters.html visit]
 +
| Intermediate
 +
|-
 +
| [http://www.eecg.toronto.edu/~amza/www.mindsec.com/files/x86regs.html visit]
 +
| Intermediate
 +
|-
 +
| rowspan="2" |How C/C++ code is transformed into assembly is also rather interesting.  Function conventions define how a function is transformed into assembly code.
 +
| [http://www.unixwiz.net/techtips/win32-callconv-asm.html visit]
 +
| Advanced
 +
|-
 +
| [http://www.nynaeve.net/?p=66 visit]
 +
| Advanced
 +
|-
 +
| Intel also maintains a series of books on assembly programmingThese things are fairly hefty and you'll want to be familiar with the basics of the x86 architecture before tackling them.
 +
| [http://www.intel.com/products/processor/manuals/index.htm visit]
 +
| Advanced
 +
|-
 +
| AMD also has a list of manuals for programming on its AMD64 architecture.
 +
| [http://www.amd.com/us-en/Processors/DevelopWithAMD/0,,30_2252_875_7044,00.html visit]
 +
|
 +
|-
 +
| A fairly verbose win32 tutorialWhile not nearly as indepth as Petzold's book, this does cover a fair amount of material and is a great place to start learning the Windows API.
 +
| [http://www.winprog.org/tutorial/ visit]
 +
| Intermediate
 +
|-
 +
| SEH is how exceptions are handled in WindowsIf you want to do system programming, you're going to need to learn it.
 +
| [http://www.microsoft.com/msj/0197/exception/exception.aspx visit]
 +
| Advanced
 +
|-
 +
| Some aspects of Windows use the Component Object Model extensively and a tutorial to to writing them in 7 parts is on CodeProject.
 +
| [http://www.codeproject.com/com_in_c1.asp visit]
 +
| Intermediate / Advanced
 +
|}
 +
==== See also ====
 +
* [[External Documentation Links]]
  
==Online==
+
=== Books ===
 +
{| class="wikitable"
 +
! Description
 +
! Name / ISBN
 +
! Level
 +
|-
 +
| ''The'' book for the Windows API.  ReactOS uses the win32 API extensively for any of its own graphical applications as well as support the various win32 applications written by third parties.
 +
| Programming Windows, 5th Edition
 +
ISBN 1-57231-995-X
 +
| Intermediate / Advanced
 +
|-
 +
| ''The'' book for using the Microsoft Foundation Classes.  While ReactOS does not support MFC, we could potentially do so in the future if someone were to implement it.  Of course, one would have to be thoroughly familiar with MFC to do so.
 +
| Programming Windows with MFC
 +
ISBN 1-57231-695-0
 +
| Intermediate / Advanced
 +
|}
  
A general C++ tutorial that covers the first basic program to more advanced topics like templates.
+
== Operating Systems ==
 
 
*http://www.cplusplus.com/doc/tutorial/ -Introductory/Intermediate
 
 
 
This tutorial is huge.  It covers a large range of topics in C programming and focuses a lot on its use on UNIX platforms.  However, in doing so, it also teaches you a lot about what C is capable of and how it's used in an operating system.
 
 
 
*http://www.cs.cf.ac.uk/Dave/C/ -Introductory/Intermediate/Advanced
 
 
 
Pointers are some of the trickiest things to work with in C/C++.  This tutorial provides examples of various techniques that take advantage of them.
 
 
 
*http://www.newty.de/fpt/index.html -Intermediate/Advanced
 
 
 
A very nice reference to the C and C++ Standard Libraries.  In order to do anything substantial or even trivial, you're likely to be using things from the Standard Libraries.
 
 
 
*http://www.cppreference.com/index.html -Intermediate/Advanced
 
 
 
An introduction to IBM's PowerPC.  If you've never seen assembly code before, I'd advise you start with learning the assembly for a RISC architecture like the PPC.  Good PPC tutorials can actually be hard to come by, but these should get you started.
 
 
 
*http://www.ibm.com/developerworks/library/l-ppc/ -Intermediate<br/>
 
*http://www.lightsoft.co.uk/Fantasm/Beginners/begin1.html -Intermediate<br/>
 
*http://home-3.tiscali.nl/~solognt/codingstuff/ppc_cursus.html -Intermediate
 
 
 
These two are guides to Intel's assembly language.  Both have their strengths and weaknesses, but they seem to complement each other well.
 
 
 
*http://www.drpaulcarter.com/pcasm/index.php -Intermediate<br/>
 
*http://savannah.nongnu.org/projects/pgubook/ -Intermediate
 
 
 
Registers on Intel's architecture have a somewhat contrived naming convention compared to RISC architectures.  These two references provide a breakdown of what they are and how they're used.
 
 
 
*http://www.swansontec.com/sregisters.html -Intermediate<br/>
 
*http://www.eecg.toronto.edu/~amza/www.mindsec.com/files/x86regs.html -Intermediate
 
 
 
How C/C++ code is transformed into assembly is also rather interesting.  Function conventions define how a function is transformed into assembly code.
 
 
 
*http://www.unixwiz.net/techtips/win32-callconv-asm.html -Advanced<br/>
 
*http://www.nynaeve.net/?p=66 -Advanced
 
 
 
Intel also maintains a series of books on assembly programming.  These things are fairly hefty and you'll want to be familiar with the basics of the x86 architecture before tackling them.
 
 
 
*http://www.intel.com/products/processor/manuals/index.htm -Advanced
 
 
 
A fairly verbose win32 tutorial.  While not nearly as indepth as Petzold's book, this does cover a fair amount of material and is a great place to start learning the Windows API.
 
 
 
*http://www.winprog.org/tutorial/ -Intermediate
 
 
 
SEH is how exceptions are handled in Windows.  If you want to do system programming, you're going to need to learn it.
 
 
 
*http://www.microsoft.com/msj/0197/exception/exception.aspx -Advanced
 
 
 
Some aspects of Windows use the Component Object Model extensively and a tutorial to to writing them in 7 parts is on CodeProject.
 
 
 
*http://www.codeproject.com/com_in_c1.asp -Intermediate/Advanced
 
 
 
==Books==
 
 
 
<i>The</i> book for the Windows API.  ReactOS uses the win32 API extensively for any of its own graphical applications as well as support the various win32 applications written by third parties.
 
 
 
*Programming Windows, 5th Edition ISBN 1-5723-1995-X -Intermediate/Advanced
 
 
 
<i>The</i> book for using the Microsoft Foundation Classes.  While ReactOS does not support MFC, we could potentially do so in the future if someone were to implement it.  Of course, one would have to be thoroughly familiar with MFC to do so.
 
 
 
*Programming Windows with MFC ISBN 1-5723-1695-0 -Intermediate/Advanced
 
 
 
=Operating Systems=
 
  
 
The intent of this section is to pick up where the programming section left off in getting people up to speed.  As such, the links here are aimed at familiarizing people with OS fundamentals and then introducing the Windows NT architecture.  It is not intended to provide links to every other operating system in existence.  The references here are tagged as Introductory, Intermediate, or Advanced.  However, the tags are in the context of operating system knowledge, not general computer science knowledge.  In general, one should be at the Intermediate for programming to fully understand the Introductory material here.  Introductory material tends to be concept explanations.  By the time implementation begins being covered in depth, we're in the Intermediate range.
 
The intent of this section is to pick up where the programming section left off in getting people up to speed.  As such, the links here are aimed at familiarizing people with OS fundamentals and then introducing the Windows NT architecture.  It is not intended to provide links to every other operating system in existence.  The references here are tagged as Introductory, Intermediate, or Advanced.  However, the tags are in the context of operating system knowledge, not general computer science knowledge.  In general, one should be at the Intermediate for programming to fully understand the Introductory material here.  Introductory material tends to be concept explanations.  By the time implementation begins being covered in depth, we're in the Intermediate range.
Line 78: Line 104:
 
Programming topics here are usually in regard to systems programming not covered in the references above.
 
Programming topics here are usually in regard to systems programming not covered in the references above.
  
==Online==
+
=== Online ===
 
+
{| class="wikitable"
A one stop reference site of sorts.  It has a few holes, but provides some decent overviews.
+
! Description
 
+
! Website
*http://www.osdev.org/wiki/Main_Page Introductory/Intermediate/Advanced
+
! Level
 
+
|-
An excellent overview and introduction to the principles behind operating systems.  This link contains much of the information the Minix OS book also has, but of course does not include OS specific implementations, just generalized ones.  If you want an introduction to operating systems, this is the page to start with.
+
| A one stop reference site of sorts.  It has a few holes, but provides some decent overviews.
 
+
| [http://www.osdev.org/wiki/Main_Page visit]
*http://pages.cs.wisc.edu/~solomon/cs537.html#notes -Introductory/Intermediate
+
| Introductory / Intermediate / Advanced
 
+
|-
This explains the principles behind how a computer boots into an operating system.  It doesn't delve into the code behind it, but provides the general outline of what is going on.
+
| An excellent overview and introduction to the principles behind operating systems.  This link contains much of the information the Minix OS book also has, but of course does not include OS specific implementations, just generalized ones.  If you want an introduction to operating systems, this is the page to start with.
 +
| [http://pages.cs.wisc.edu/~solomon/cs537.html#notes visit]
 +
| Introductory / Intermediate
 +
|-
 +
| This explains the principles behind how a computer boots into an operating system.  It doesn't delve into the code behind it, but provides the general outline of what is going on.
 +
| [https://web.archive.org/web/20090519004822/http://www.osdever.net/tutorials/booting_process.php visit]
 +
| Introductory
 +
|-
 +
| A tutorial on how to write your own simple kernel.  Some of this won't make much sense unless you're familiar with the Introductory materials.
 +
| [http://www.osdever.net/bkerndev/index.php visit]
 +
| Intermediate
 +
|-
 +
| WDM is the driver model used in 2000, XP, and Vista, though Vista is slowly transitioning it out.  This provides an outline of WDM as well as links to getting the Driver Development Kit.
 +
| [https://web.archive.org/web/20101222221827/http://www.microsoft.com/whdc/archive/wdm.mspx visit]
 +
| Intermediate
 +
|-
 +
| WDF is the new driver model for Windows Vista.  This provides an introduction and links to various resources.  Also, the new Windows Driver Kit includes the various headers needed for filesystem drivers, which will come in handy once ReactOS can handle new filesystems.
 +
| [http://www.microsoft.com/whdc/driver/wdf/default.mspx visit]
 +
| Intermediate
 +
|-
 +
| The online component of the book OS Concepts, this page has three online chapters talking about FreeBSD, Mach, and Windows 2000.  They're great references for taking a peek at how these operating systems work.
 +
| [http://codex.cs.yale.edu/avi/os-book/OS8/os8e/index.html visit]
 +
| Intermediate
 +
|-
 +
| This is the first of several articles introducing how to write Windows drivers.  Considering how rare such tutorials are, it's a good place to start.
 +
| [https://www.codeproject.com/Articles/9504/Driver-Development-Part-Introduction-to-Drivers visit]
 +
|
 +
|-
 +
| A guide to various undocumented functions of the [https://en.wikipedia.org/wiki/Native_API Native API] exposed by [https://en.wikipedia.org/wiki/Microsoft_Windows_library_files#NTDLL.DLL NTDLL].
 +
| [http://www.ntinternals.net visit]
 +
| Intermediate / Advanced
 +
|}
  
*http://www.osdever.net/tutorials/booting_process.php -Introductory
+
=== Books ===
 +
{| class="wikitable"
 +
! Description
 +
! Name / ISBN
 +
! Level
 +
|-
 +
| This book is perhaps ''the'' best reference one can find to learn the principles and fundamentals of operating systems.  The text provides a decent amount of depth and provides examples from various operating systems in use today.  The chapter on Windows XP is especially useful for grasping the basics before one moves onto the Windows Internal book.
 +
| Operating System Concepts, Seventh Edition
 +
ISBN 0-471-69466-5
 +
| Introductory / Intermediate / Advanced
 +
|-
 +
| A book that covers the theory behind operating systems and also examines their implementation in Minix.  It's a decent book for learning the fundamentals and immediately delve into how they're transformed into code.  While this book does cover the basics, its implementation angle is based on a microkernel design, not the monolithic kernel in general use today.
 +
| Operating Systems: Design and Implementation (The Minix Book)
 +
ISBN 0-471-69466-5
 +
|Introductory / Intermediate / Advanced
 +
|-
 +
| ''The'' book for learning about the Windows operating system.  This book covers Windows Vista and Server 2008 and was co-authored by Alex Ionescu, a former ReactOS kernel developer. [http://support.microsoft.com/kb/975283 errata], [http://www.oreilly.com/catalog/errata.csp?isbn=9780735625303 more errata]
 +
| Windows Internals, Fifth Edition
 +
ISBN 0-7356-2530-1
 +
| Intermediate / Advanced
 +
|-
 +
| ''The'' book for learning about the Windows operating system.  This book covers 2000, XP, and Server 2003. [http://support.microsoft.com/kb/892212 errata]
 +
| Windows Internals, Fourth Edition
 +
ISBN 0-7356-1917-4
 +
| Intermediate / Advanced
 +
|-
 +
| The third edition of the Windows Internals series, this book covers up to Windows 2000.
 +
| Inside Microsoft Windows 2000 Third edition
 +
ISBN 0-7356-1021-5
 +
|
 +
|-
 +
| A book that details the undocumented kernel API in Windows 2000.  Even if it is for Windows 2000, its content is still relevant as each Windows version is basically building upon previous releases.  Even better, this book was released by its author online for free: http://www.rawol.com/?topic=41
 +
| Undocumented Windows 2000 Secrets
 +
ISBN 0-201-72187-2
 +
| Advanced
 +
|-
 +
| A book that examines the internals of Windows NT.  Pre-2000.
 +
| Undocumented Windows NT
 +
ISBN 0-7645-4569-8
 +
|
 +
|-
 +
| A book that details the native API in Windows NT and 2000.
 +
| Windows NT/2000, Native API Reference
 +
ISBN 1-57870-199-6
 +
| Advanced
 +
|-
 +
| This is perhaps the only book with detailed instructions on how to write a file system driver for Windows.
 +
| Windows NT File System Internals
 +
ISBN 1-56592-249-2
 +
| Advanced
 +
|-
 +
| This book is the primary reference used by the ReactOS developers for implementing win32k.  It has a lot of information and is a good book for learning how Windows draws things.
 +
| Windows Graphics Programming: Win32 GDI and DirectDraw
 +
ISBN 0-13-086985-6
 +
| Intermediate / Advanced
 +
|-
 +
| This book covers some of the undocumented internal APIs in win32k.  A good read and useful reference for seeing what happens inside the win32k subsystem.
 +
| Windows 2000 Graphics API, Black Book
 +
ISBN 1-932111-39-5
 +
| Advanced
 +
|-
 +
| The user32 DLL handles windows messages and other related matters in relation with the Windows API.  This book covers primarily the documented API calls for user32.
 +
| Microsoft Windows 2000 API, Super Bible
 +
ISBN 0-672-31933-0
 +
| Intermediate / Advanced
 +
|-
 +
| A book on writing drivers for Windows 2000.
 +
| Windows 2000 Device Driver Book: A Guide for Programmers, 2nd Edition
 +
ISBN 0-13-020431-5
 +
|
 +
|-
 +
| WDM is the driver model used in 2000, XP, and Vista, though Vista is slowly transitioning it out.  As ReactOS' aim is for XP compatibility, we will also be implementing WDM.
 +
| Programming the Microsoft Windows Driver Model, Second Edition
 +
ISBN 0-7356-1803-8
 +
| Advanced
 +
|-
 +
| WDF is the new driver model for Windows Vista.  As Microsoft has tied in DirectX 10 to this, ReactOS will eventually need to implement it.
 +
| Developing Drivers with the Windows Driver Foundation
 +
ISBN 0-7356-2374-0
 +
| Advanced
 +
|}
  
A tutorial on how to write your own simple kernel.  Some of this won't make much sense unless you're familiar with the Introductory materials.
+
== .NET ==
 
 
*http://www.osdever.net/bkerndev/index.php -Intermediate
 
 
 
WDM is the driver model used in 2000, XP, and Vista, though Vista is slowly transitioning it out.  This provides an outline of WDM as well as links to getting the Driver Development Kit.
 
 
 
*http://www.microsoft.com/whdc/archive/wdm.mspx -Intermediate
 
 
 
WDF is the new driver model for Windows Vista.  This provides an introduction and links to various resources.  Also, the new Windows Driver Kit includes the various headers needed for filesystem drivers, which will come in handy once ReactOS can handle new filesystems.
 
 
 
*http://www.microsoft.com/whdc/driver/wdf/default.mspx -Intermediate
 
 
 
The online component of the book OS Concepts, this page has three online chapters talking about FreeBSD, Mach, and Windows 2000.  They're great references for taking a peek at how these operating systems work.
 
 
 
*http://codex.cs.yale.edu/avi/os-book/os7/index.php -Intermediate
 
 
 
This is the first of several articles introducing how to write Windows drivers.  Considering how rare such tutorials are, it's a good place to start.
 
 
 
*http://www.codeproject.com/system/driverdev.asp
 
 
 
The following site contains some information on various aspects of Windows.
 
* http://www.mdgx.com/
 
 
 
==Books==
 
 
 
This book is perhaps <i>the</i> best reference one can find to learn the principles and fundamentals of operating systems. The text provides a decent amount of depth and provides examples from various operating systems in use today.  The chapter on Windows XP is especially useful for grasping the basics before one moves onto the Windows Internal book.
 
 
 
*Operating System Concepts, Seventh Edition ISBN 0-4716-9466-5 -Introductory/Intermediate/Advanced
 
 
 
A book that covers the theory behind operating systems and also examines their implementation in Minix.  It's a decent book for learning the fundamentals and immediately delve into how they're transformed into code.  While this book does cover the basics, its implementation angle is based on a microkernel design, not the monolithic kernel in general use today.
 
 
 
*Operating Systems: Design and Implementation (The Minix Book) ISBN 0-4716-9466-5 -Introductory/Intermediate/Advanced
 
 
 
<i>The</i> book for learning about the Windows operating system.  This book covers 2000, XP, and Server 2003.
 
 
 
*Windows Internals, Fourth Edition ISBN 0-7356-1917-4 -Intermediate/Advanced
 
 
 
The third edition of the Windows Internals series, this book covers up to Windows 2000.
 
 
 
*Inside Microsoft Windows 2000 Third edition ISBN 0-7356-1021-5
 
 
 
A book that details the undocumented kernel API in Windows 2000.  Even if it is for Windows 2000, its content is still relevant as each Windows version is basically building upon previous releases.  Even better, this book was released by its author online for free: http://www.rawol.com/?topic=41
 
 
 
*Undocumented Windows 2000 Secrets ISBN 0-201-72187-2 -Advanced
 
 
 
A book that examines the internals of Windows NT.  Pre-2000.
 
 
 
*Undocumented Windows NT ISBN 0-7645-4569-8
 
 
 
A book that details the native API in Windows NT and 2000.
 
 
 
*Windows NT/2000, Native API Reference ISBN 1-5787-0199-6 -Advanced
 
 
 
This is perhaps the only book that examines the internals of the NTFS file system.
 
 
 
*Windows NT File System Internals ISBN 1-5659-2249-2 -Advanced
 
 
 
This book is the primary reference used by the ReactOS developers for implementing win32k.  It has a lot of information and is a good book for learning how Windows draws things.
 
 
 
*Windows Graphics Programming: Win32 GDI and DirectDraw ISBN 0-13-086985-6 -Intermediate/Advanced
 
 
 
This book covers some of the undocumented internal APIs in win32k.  A good read and useful reference for seeing what happens inside the win32k subsystem.
 
 
 
*Windows 2000 Graphics API, Black Book ISBN 1-932111-39-5 -Advanced
 
 
 
The user32 DLL handles windows messages and other related matters in relation with the Windows API.  This book covers primarily the documented API calls for user32.
 
 
 
*Microsoft Windows 2000 API, Super Bible ISBN 0-672-31933-0 -Intermediate/Advanced
 
 
 
A book on writing drivers for Windows 2000.
 
 
 
*Windows 2000 Device Driver Book: A Guide for Programmers, 2nd Edition ISBN 0-1302-0431-5
 
 
 
WDM is the driver model used in 2000, XP, and Vista, though Vista is slowly transitioning it out.  As ReactOS' aim is for XP compatibility, we will also be implementing WDM.
 
 
 
*Programming the Microsoft Windows Driver Model, Second Edition ISBN 0-7356-1803-8 -Advanced
 
 
 
WDF is the new driver model for Windows Vista.  As Microsoft has tied in DirectX 10 to this, ReactOS will eventually need to implement it.
 
 
 
*Developing Drivers with the Windows Driver Foundation ISBN 0-73-562374-0 -Advanced
 
 
 
=.NET=
 
  
 
While ReactOS does not have any components to support .NET, it is the future of Windows application programming and will have to be dealt with.  .NET is a remarkable piece of technology, though not without its own issues.  Some of the more interesting ways to use C# have only begun to emerge as Microsoft begins releasing some of the technology they've developed as part of their Singularity project.  While this section does include links to some things still in R&D, our primary focus will be on the underlying principles of what is in production use today.  Unlike the programming section above, we won't bother linking intro tutorials on C# and the like.  Instead we'll focus on the underlying technologies and concepts as well as some of its more interesting applications.
 
While ReactOS does not have any components to support .NET, it is the future of Windows application programming and will have to be dealt with.  .NET is a remarkable piece of technology, though not without its own issues.  Some of the more interesting ways to use C# have only begun to emerge as Microsoft begins releasing some of the technology they've developed as part of their Singularity project.  While this section does include links to some things still in R&D, our primary focus will be on the underlying principles of what is in production use today.  Unlike the programming section above, we won't bother linking intro tutorials on C# and the like.  Instead we'll focus on the underlying technologies and concepts as well as some of its more interesting applications.
  
==Online==
+
=== Online ===
 
+
{| class="wikitable"
The Introduction to MSIL by Kenny Kerr is a very nice set of tutorials on MSIL, the bytecode Visual Studio generates for .NET applications.  While learning MSIL is not essential to learning how to use .NET, it is somewhat analogous to learning assembly in order to understand the foundations of C.  The articles are in reverse order, bottom to top.
+
! Description
 
+
! Website
*http://weblogs.asp.net/kennykerr/archive/tags/Introduction+to+MSIL/default.aspx -Intermediate/Advanced
+
! Level
 
+
|-
Another great article by Kenny Kerr, this one discusses C++ and how it fits into the .NET framework.
+
| The Introduction to MSIL by Kenny Kerr is a very nice set of tutorials on MSIL, the bytecode Visual Studio generates for .NET applications.  While learning MSIL is not essential to learning how to use .NET, it is somewhat analogous to learning assembly in order to understand the foundations of C.  The articles are in reverse order, bottom to top.
 
+
| [http://weblogs.asp.net/kennykerr/archive/tags/Introduction+to+MSIL/default.aspx visit]
*http://msdn2.microsoft.com/en-us/library/ms379617(VS.80).aspx -Intermediate/Advanced
+
| Intermediate / Advanced
 
+
|-
An article on LINQ.
+
| Another great article by Kenny Kerr, this one discusses C++ and how it fits into the .NET framework.
 
+
| [http://msdn2.microsoft.com/en-us/library/ms379617(VS.80).aspx visit]
*http://msdn.microsoft.com/msdnmag/issues/07/06/csharp30/default.aspx -Intermediate/Advanced
+
| Intermediate / Advanced
 +
|-
 +
| An article on LINQ.
 +
| [http://msdn.microsoft.com/msdnmag/issues/07/06/csharp30/default.aspx visit]
 +
| Intermediate / Advanced
 +
|-
 +
| A great article talking about data structures in C#.  It's also a good general introduction to data structures, as much of the theory is applicable to other languages.
 +
| [http://msdn2.microsoft.com/en-us/vcsharp/aa336800.aspx visit]
 +
| Intermediate / Advanced
 +
|-
 +
| rowspan="2" | An article covering how .NET handles garbage collecting.
 +
| [http://msdn.microsoft.com/msdnmag/issues/1100/gci/ visit]
 +
|
 +
|-
 +
| [http://msdn.microsoft.com/msdnmag/issues/1200/GCI2/default.aspx visit]
 +
|
 +
|}
  
A great article talking about data structures in C#.  It's also a good general introduction to data structures, as much of the theory is applicable to other languages.
+
== Pre-NT Generation ==
  
*http://msdn2.microsoft.com/en-us/vcsharp/aa336800.aspx -Intermediate/Advanced
 
 
An article covering how .NET handles garbage collecting.
 
 
*http://msdn.microsoft.com/msdnmag/issues/1100/gci/
 
*http://msdn.microsoft.com/msdnmag/issues/1200/GCI2/default.aspx
 
 
=Pre-NT Generation=
 
 
The operating system that got Microsoft off the ground, the 16-bit DOS is still with us today, acting as the command line interface for Windows. DOS was also the core of the Windows 9x family, which had thousands of applications written for it. The main reason for application breakage as people moved to 2000 and XP was because DOS allowed far more freedom in accessing hardware and other system resources.  While DOS itself has long been made obsolete, knowledge of it is still useful and several projects exist trying to update it for the 21st century.
 
The operating system that got Microsoft off the ground, the 16-bit DOS is still with us today, acting as the command line interface for Windows. DOS was also the core of the Windows 9x family, which had thousands of applications written for it. The main reason for application breakage as people moved to 2000 and XP was because DOS allowed far more freedom in accessing hardware and other system resources.  While DOS itself has long been made obsolete, knowledge of it is still useful and several projects exist trying to update it for the 21st century.
  
The early versions of Windows were in reality nothing more than a graphics layer sitting atop DOS.  As DOS is a 16bit OS, non Version of Windows priotr to Win 9x and NT used and application runtime known as win32s to run 32bit applications. This used a technique known as thunking between the
+
The early versions of Windows were in reality nothing more than a graphics layer sitting atop DOS.  As DOS is a 16bit OS, non Version of Windows prior to Win 9x and NT used an application runtime known as win32s to run 32bit applications. This used a technique known as thunking between the 16 and 32 bit portions.  The thunking approach was taken a stage further in Windows 9x which also implemented portions of the 32bit API's directly.
16 and 32 bit portions.  The thunking approach was taken a stage further in Windows 9x which also implemented portions of the 32bit API's directly :0
 
  
 +
In modern versions of the Windows family, Microsoft has a variety of tools and applications that have allowed 16bit applications to continue to run on their 32bit operating systems. This compatibility is achieved through the combination of NTVDM and WOWEXEC.  Neither approach is fully implemented in ReactOS (as of 2017) , but a basic implementation of NTVDM has been under development.
  
In modern versions of the Windows family, Microsoft has a variety of tools and applications that have allowed 16bit applications to continue to run on their 32bit operating systems. This compatibility is achieved through the combination of NTVDM and WOWEXEC.
+
=== Online ===
 
+
{| class="wikitable"
==Online==
+
! Description
There are two primary open source DOS implementations.  FreeDOS attempts to create a system completely compatible with MS-DOS while updating it for newer hardware.  However, FreeDOS also duplicates some of the limitations that MS-DOS had.  FreeDOS-32 attempts to expand upon what Microsoft created, producing a pure 32bit operating system capable of running 16bit DOS applications.
+
! Website
 +
! Level
 +
|-
 +
| rowspan="2" | There are two primary open source DOS implementations.  FreeDOS attempts to create a system completely compatible with MS-DOS while updating it for newer hardware.  However, FreeDOS also duplicates some of the limitations that MS-DOS had.  FreeDOS-32 attempts to expand upon what Microsoft created, producing a pure 32bit operating system capable of running 16bit DOS applications.
  
 
FreeDOS would in theory make a great foundation for reimplementation of the (DOS 7.1) base onto
 
FreeDOS would in theory make a great foundation for reimplementation of the (DOS 7.1) base onto
 
which any number of windowing environments could be placed. This could include clones of Windows
 
which any number of windowing environments could be placed. This could include clones of Windows
3.x or Windows 9.x( The target of the now abandoned Freedows project)
+
3.x or Windows 9x (the target of the now abandoned Freedows project).
 
+
| http://www.freedos.org/
*http://www.freedos.org/<br/>
+
|
*http://freedos-32.sourceforge.net/
+
|-
 
+
| http://freedos-32.sourceforge.net/
Even if one has a DOS system to work with, guides to use it are certain useful.
+
|
 
+
|-
*http://www.nukesoft.co.uk/msdos/ -Introductory
+
| Even if one has a DOS system to work with, guides to use it are certainly useful.
 
+
| http://www.nukesoft.co.uk/msdos/
Batch files are basically command scripts.  As DOS was a command line operating system, it figures you could chain commands together into a single script and then execute that script.  Also, batch files can be used in 2000 and XP to do certain tasks.
+
| Introductory
 
+
|-
*http://home7.inet.tele.dk/batfiles/batfiles.htm -Intermediate
+
| Batch files are basically command scripts.  As DOS was a command line operating system, it figures you could chain commands together into a single script and then execute that script.  Also, batch files can be used in 2000 and XP to do certain tasks.
 
+
| http://home7.inet.tele.dk/batfiles/batfiles.htm
==Books==
+
| Intermediate
 
+
|-
Prior to the current Windows Driver Model, a number of driver appoaches existed, including in resect of DOS, direct hardware control by applications software.
+
| ECMA-234, which defines the API used just prior to Windows 95.
 
+
| http://www.ecma-international.org/publications/standards/Ecma-234.htm
Windows 9.X and (to some extent Windows For Workgroups) 3.11 which preceded it) use the (Vritual Device Drive) VXD driver model. Largely assembler based, the model has been described as excruciating and hard to work with, which was what prompted the shift to WDM.  
+
|
 
+
|}
Though tehchnically deprecated, knowing an operating system's driver model exposes a lot about its kernel and internal architecture.
 
  
*Writing Windows VxD and Device Drivers, Second Edition ISBN 0-8793-0438-3
+
=== Books ===
 +
{| class="wikitable"
 +
! Description
 +
! Name / ISBN
 +
|-
 +
| rowspan="2" | Though deprecated, knowing an operating system's driver model exposes a lot about its kernel and internal architecture.
 +
| Writing Windows VxD and Device Drivers, Second Edition
 +
ISBN 0-87930-438-3
 +
|-
 +
| Peitrek, Mark ; "Windows 95 System Programming Secrets"
 +
|}
  
As well as supporting VXD, Windows 9x and Windows 3.1x used a DRV format in user mode for some
+
[[Category:Documentation]]
functions like printing. These drivers are based on a modfied DLL format. Thier sturcture and usage can largely be determined from the relevant DDK's (assuming you can find a legitmate release or archive of them.)
+
[[Category:Tutorial]]

Revision as of 18:54, 5 May 2018

This page contains a list of reference materials separated by topic. Most are relevant to ReactOS development and several others are related to Microsoft(C) technologies. They have been separated by category so you can better choose what materials are of interest to you. Some duplication of links may happen if the need to put them into two categories arose.

Programming

Before you can begin programming an operating system, you need to know how to program. The following are references and tutorials that one can use to learn various principles. As ReactOS primarily uses C, C++, and Assembly, we will only cover those in this section. The Assembly languages we will cover will be for Intel/AMD and PowerPC, as those are the only architectures ReactOS has code for. For C# and .NET related matters, scroll downwards. Each reference will be ranked as Introductory, Intermediate, or Advanced. Introductory assumes no knowledge of programming, Intermediate assumes you know how to use the language in question, and Advanced covers some of the more tricky topics in programming. Some may be more than one and a rare few will cover topics from all three.

Online

Description Website Level
A general C++ tutorial that covers the first basic program to more advanced topics like templates. visit Introductory / Intermediate
This tutorial is huge. It covers a large range of topics in C programming and focuses a lot on its use on UNIX platforms. However, in doing so, it also teaches you a lot about what C is capable of and how it's used in an operating system. visit Introductory / Intermediate / Advanced
Pointers are some of the trickiest things to work with in C/C++. This tutorial provides examples of various techniques that take advantage of them. visit Intermediate / Advanced
A very nice reference to the C and C++ Standard Libraries. In order to do anything substantial or even trivial, you're likely to be using things from the Standard Libraries. visit Intermediate / Advanced
An introduction to IBM's PowerPC. If you've never seen assembly code before, I'd advise you start with learning the assembly for a RISC architecture like the PPC. Good PPC tutorials can actually be hard to come by, but these should get you started. visit Intermediate
visit Intermediate
visit Intermediate
These two are guides to Intel's assembly language. Both have their strengths and weaknesses, but they seem to complement each other well. visit Intermediate
visit Intermediate
Registers on Intel's architecture have a somewhat contrived naming convention compared to RISC architectures. These two references provide a breakdown of what they are and how they're used. visit Intermediate
visit Intermediate
How C/C++ code is transformed into assembly is also rather interesting. Function conventions define how a function is transformed into assembly code. visit Advanced
visit Advanced
Intel also maintains a series of books on assembly programming. These things are fairly hefty and you'll want to be familiar with the basics of the x86 architecture before tackling them. visit Advanced
AMD also has a list of manuals for programming on its AMD64 architecture. visit
A fairly verbose win32 tutorial. While not nearly as indepth as Petzold's book, this does cover a fair amount of material and is a great place to start learning the Windows API. visit Intermediate
SEH is how exceptions are handled in Windows. If you want to do system programming, you're going to need to learn it. visit Advanced
Some aspects of Windows use the Component Object Model extensively and a tutorial to to writing them in 7 parts is on CodeProject. visit Intermediate / Advanced

See also

Books

Description Name / ISBN Level
The book for the Windows API. ReactOS uses the win32 API extensively for any of its own graphical applications as well as support the various win32 applications written by third parties. Programming Windows, 5th Edition

ISBN 1-57231-995-X

Intermediate / Advanced
The book for using the Microsoft Foundation Classes. While ReactOS does not support MFC, we could potentially do so in the future if someone were to implement it. Of course, one would have to be thoroughly familiar with MFC to do so. Programming Windows with MFC

ISBN 1-57231-695-0

Intermediate / Advanced

Operating Systems

The intent of this section is to pick up where the programming section left off in getting people up to speed. As such, the links here are aimed at familiarizing people with OS fundamentals and then introducing the Windows NT architecture. It is not intended to provide links to every other operating system in existence. The references here are tagged as Introductory, Intermediate, or Advanced. However, the tags are in the context of operating system knowledge, not general computer science knowledge. In general, one should be at the Intermediate for programming to fully understand the Introductory material here. Introductory material tends to be concept explanations. By the time implementation begins being covered in depth, we're in the Intermediate range.

Programming topics here are usually in regard to systems programming not covered in the references above.

Online

Description Website Level
A one stop reference site of sorts. It has a few holes, but provides some decent overviews. visit Introductory / Intermediate / Advanced
An excellent overview and introduction to the principles behind operating systems. This link contains much of the information the Minix OS book also has, but of course does not include OS specific implementations, just generalized ones. If you want an introduction to operating systems, this is the page to start with. visit Introductory / Intermediate
This explains the principles behind how a computer boots into an operating system. It doesn't delve into the code behind it, but provides the general outline of what is going on. visit Introductory
A tutorial on how to write your own simple kernel. Some of this won't make much sense unless you're familiar with the Introductory materials. visit Intermediate
WDM is the driver model used in 2000, XP, and Vista, though Vista is slowly transitioning it out. This provides an outline of WDM as well as links to getting the Driver Development Kit. visit Intermediate
WDF is the new driver model for Windows Vista. This provides an introduction and links to various resources. Also, the new Windows Driver Kit includes the various headers needed for filesystem drivers, which will come in handy once ReactOS can handle new filesystems. visit Intermediate
The online component of the book OS Concepts, this page has three online chapters talking about FreeBSD, Mach, and Windows 2000. They're great references for taking a peek at how these operating systems work. visit Intermediate
This is the first of several articles introducing how to write Windows drivers. Considering how rare such tutorials are, it's a good place to start. visit
A guide to various undocumented functions of the Native API exposed by NTDLL. visit Intermediate / Advanced

Books

Description Name / ISBN Level
This book is perhaps the best reference one can find to learn the principles and fundamentals of operating systems. The text provides a decent amount of depth and provides examples from various operating systems in use today. The chapter on Windows XP is especially useful for grasping the basics before one moves onto the Windows Internal book. Operating System Concepts, Seventh Edition

ISBN 0-471-69466-5

Introductory / Intermediate / Advanced
A book that covers the theory behind operating systems and also examines their implementation in Minix. It's a decent book for learning the fundamentals and immediately delve into how they're transformed into code. While this book does cover the basics, its implementation angle is based on a microkernel design, not the monolithic kernel in general use today. Operating Systems: Design and Implementation (The Minix Book)

ISBN 0-471-69466-5

Introductory / Intermediate / Advanced
The book for learning about the Windows operating system. This book covers Windows Vista and Server 2008 and was co-authored by Alex Ionescu, a former ReactOS kernel developer. errata, more errata Windows Internals, Fifth Edition

ISBN 0-7356-2530-1

Intermediate / Advanced
The book for learning about the Windows operating system. This book covers 2000, XP, and Server 2003. errata Windows Internals, Fourth Edition

ISBN 0-7356-1917-4

Intermediate / Advanced
The third edition of the Windows Internals series, this book covers up to Windows 2000. Inside Microsoft Windows 2000 Third edition

ISBN 0-7356-1021-5

A book that details the undocumented kernel API in Windows 2000. Even if it is for Windows 2000, its content is still relevant as each Windows version is basically building upon previous releases. Even better, this book was released by its author online for free: http://www.rawol.com/?topic=41 Undocumented Windows 2000 Secrets

ISBN 0-201-72187-2

Advanced
A book that examines the internals of Windows NT. Pre-2000. Undocumented Windows NT

ISBN 0-7645-4569-8

A book that details the native API in Windows NT and 2000. Windows NT/2000, Native API Reference

ISBN 1-57870-199-6

Advanced
This is perhaps the only book with detailed instructions on how to write a file system driver for Windows. Windows NT File System Internals

ISBN 1-56592-249-2

Advanced
This book is the primary reference used by the ReactOS developers for implementing win32k. It has a lot of information and is a good book for learning how Windows draws things. Windows Graphics Programming: Win32 GDI and DirectDraw

ISBN 0-13-086985-6

Intermediate / Advanced
This book covers some of the undocumented internal APIs in win32k. A good read and useful reference for seeing what happens inside the win32k subsystem. Windows 2000 Graphics API, Black Book

ISBN 1-932111-39-5

Advanced
The user32 DLL handles windows messages and other related matters in relation with the Windows API. This book covers primarily the documented API calls for user32. Microsoft Windows 2000 API, Super Bible

ISBN 0-672-31933-0

Intermediate / Advanced
A book on writing drivers for Windows 2000. Windows 2000 Device Driver Book: A Guide for Programmers, 2nd Edition

ISBN 0-13-020431-5

WDM is the driver model used in 2000, XP, and Vista, though Vista is slowly transitioning it out. As ReactOS' aim is for XP compatibility, we will also be implementing WDM. Programming the Microsoft Windows Driver Model, Second Edition

ISBN 0-7356-1803-8

Advanced
WDF is the new driver model for Windows Vista. As Microsoft has tied in DirectX 10 to this, ReactOS will eventually need to implement it. Developing Drivers with the Windows Driver Foundation

ISBN 0-7356-2374-0

Advanced

.NET

While ReactOS does not have any components to support .NET, it is the future of Windows application programming and will have to be dealt with. .NET is a remarkable piece of technology, though not without its own issues. Some of the more interesting ways to use C# have only begun to emerge as Microsoft begins releasing some of the technology they've developed as part of their Singularity project. While this section does include links to some things still in R&D, our primary focus will be on the underlying principles of what is in production use today. Unlike the programming section above, we won't bother linking intro tutorials on C# and the like. Instead we'll focus on the underlying technologies and concepts as well as some of its more interesting applications.

Online

Description Website Level
The Introduction to MSIL by Kenny Kerr is a very nice set of tutorials on MSIL, the bytecode Visual Studio generates for .NET applications. While learning MSIL is not essential to learning how to use .NET, it is somewhat analogous to learning assembly in order to understand the foundations of C. The articles are in reverse order, bottom to top. visit Intermediate / Advanced
Another great article by Kenny Kerr, this one discusses C++ and how it fits into the .NET framework. visit Intermediate / Advanced
An article on LINQ. visit Intermediate / Advanced
A great article talking about data structures in C#. It's also a good general introduction to data structures, as much of the theory is applicable to other languages. visit Intermediate / Advanced
An article covering how .NET handles garbage collecting. visit
visit

Pre-NT Generation

The operating system that got Microsoft off the ground, the 16-bit DOS is still with us today, acting as the command line interface for Windows. DOS was also the core of the Windows 9x family, which had thousands of applications written for it. The main reason for application breakage as people moved to 2000 and XP was because DOS allowed far more freedom in accessing hardware and other system resources. While DOS itself has long been made obsolete, knowledge of it is still useful and several projects exist trying to update it for the 21st century.

The early versions of Windows were in reality nothing more than a graphics layer sitting atop DOS. As DOS is a 16bit OS, non Version of Windows prior to Win 9x and NT used an application runtime known as win32s to run 32bit applications. This used a technique known as thunking between the 16 and 32 bit portions. The thunking approach was taken a stage further in Windows 9x which also implemented portions of the 32bit API's directly.

In modern versions of the Windows family, Microsoft has a variety of tools and applications that have allowed 16bit applications to continue to run on their 32bit operating systems. This compatibility is achieved through the combination of NTVDM and WOWEXEC. Neither approach is fully implemented in ReactOS (as of 2017) , but a basic implementation of NTVDM has been under development.

Online

Description Website Level
There are two primary open source DOS implementations. FreeDOS attempts to create a system completely compatible with MS-DOS while updating it for newer hardware. However, FreeDOS also duplicates some of the limitations that MS-DOS had. FreeDOS-32 attempts to expand upon what Microsoft created, producing a pure 32bit operating system capable of running 16bit DOS applications.

FreeDOS would in theory make a great foundation for reimplementation of the (DOS 7.1) base onto which any number of windowing environments could be placed. This could include clones of Windows 3.x or Windows 9x (the target of the now abandoned Freedows project).

http://www.freedos.org/
http://freedos-32.sourceforge.net/
Even if one has a DOS system to work with, guides to use it are certainly useful. http://www.nukesoft.co.uk/msdos/ Introductory
Batch files are basically command scripts. As DOS was a command line operating system, it figures you could chain commands together into a single script and then execute that script. Also, batch files can be used in 2000 and XP to do certain tasks. http://home7.inet.tele.dk/batfiles/batfiles.htm Intermediate
ECMA-234, which defines the API used just prior to Windows 95. http://www.ecma-international.org/publications/standards/Ecma-234.htm

Books

Description Name / ISBN
Though deprecated, knowing an operating system's driver model exposes a lot about its kernel and internal architecture. Writing Windows VxD and Device Drivers, Second Edition

ISBN 0-87930-438-3

Peitrek, Mark ; "Windows 95 System Programming Secrets"