<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" /> <base href="https://issues.shibboleth.net/jira" />
<title>Message Title</title>
</head>
<body class="jira" style="color: #333; font-family: Arial, sans-serif; font-size: 14px; line-height: 1.429">
<table id="background-table" cellpadding="0" cellspacing="0" width="100%" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt; background-color: #f5f5f5; border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt">
<!-- header here -->
<tr>
<td id="header-pattern-container" style="padding: 0px; border-collapse: collapse; padding: 10px 20px">
<table id="header-pattern" cellspacing="0" cellpadding="0" border="0" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt">
<tr>
<td id="header-avatar-image-container" valign="top" style="padding: 0px; border-collapse: collapse; vertical-align: top; width: 32px; padding-right: 8px"> <img id="header-avatar-image" class="image_fix" src="cid:jira-generated-image-avatar-7b784eb9-f651-4a00-b23e-bd7594c9b837" height="32" width="32" border="0" style="border-radius: 3px; vertical-align: top" />
</td>
<td id="header-text-container" valign="middle" style="padding: 0px; border-collapse: collapse; vertical-align: middle; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px; mso-line-height-rule: exactly; mso-text-raise: 1px"> <a class="user-hover" rel="rdw@iay.org.uk" id="email_rdw@iay.org.uk" href="https://issues.shibboleth.net/jira/secure/ViewProfile.jspa?name=rdw%40iay.org.uk" style="color:#3b73af;; color: #3b73af; text-decoration: none">Rod Widdowson</a> <strong>commented</strong> on <a href="https://issues.shibboleth.net/jira/browse/SSPCPP-694" style="color: #3b73af; text-decoration: none"><img src="cid:jira-generated-image-avatar-a6363f17-cec0-454a-a88a-09b62bec4f25" height="16" width="16" border="0" align="absmiddle" alt="New Feature" /> SSPCPP-694</a>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td id="email-content-container" style="padding: 0px; border-collapse: collapse; padding: 0 20px">
<table id="email-content-table" cellspacing="0" cellpadding="0" border="0" width="100%" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt; border-spacing: 0; border-collapse: separate">
<tr>
<!-- there needs to be content in the cell for it to render in some clients -->
<td class="email-content-rounded-top mobile-expand" style="padding: 0px; border-collapse: collapse; color: #fff; padding: 0 15px 0 16px; height: 15px; background-color: #fff; border-left: 1px solid #ccc; border-top: 1px solid #ccc; border-right: 1px solid #ccc; border-bottom: 0; border-top-right-radius: 5px; border-top-left-radius: 5px; height: 10px; line-height: 10px; padding: 0 15px 0 16px; mso-line-height-rule: exactly">
</td>
</tr>
<tr>
<td class="email-content-main mobile-expand " style="padding: 0px; border-collapse: collapse; border-left: 1px solid #ccc; border-right: 1px solid #ccc; border-top: 0; border-bottom: 0; padding: 0 15px 0 16px; background-color: #fff">
<table class="page-title-pattern" cellspacing="0" cellpadding="0" border="0" width="100%" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt">
<tr>
<td style="vertical-align: top;; padding: 0px; border-collapse: collapse; padding-right: 5px; font-size: 20px; line-height: 30px; mso-line-height-rule: exactly" class="page-title-pattern-header-container"> <span class="page-title-pattern-header" style="font-family: Arial, sans-serif; padding: 0; font-size: 20px; line-height: 30px; mso-text-raise: 2px; mso-line-height-rule: exactly; vertical-align: middle"> <a href="https://issues.shibboleth.net/jira/browse/SSPCPP-694" style="color: #3b73af; text-decoration: none">Re: Native IIS7+ module/filter</a> </span>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td id="text-paragraph-pattern-top" class="email-content-main mobile-expand comment-top-pattern" style="padding: 0px; border-collapse: collapse; border-left: 1px solid #ccc; border-right: 1px solid #ccc; border-top: 0; border-bottom: 0; padding: 0 15px 0 16px; background-color: #fff; border-bottom: none; padding-bottom: 0">
<table class="text-paragraph-pattern" cellspacing="0" cellpadding="0" border="0" width="100%" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px; mso-line-height-rule: exactly; mso-text-raise: 2px">
<tr>
<td class="text-paragraph-pattern-container mobile-resize-text " style="padding: 0px; border-collapse: collapse; padding: 0 0 10px 0">
<p style="margin: 10px 0 0 0">So here is a long status update:</p>
<ul>
<li>
IIS programming is very unfashionable, all the hip kids are doing Azure. This means that the documentation is pretty much rotten and all IIS7 based.
</li>
</ul>
<ul>
<li>
Nonetheless it's not terribly difficult to develop modules and handers in .NET (C#) for IIS10 (server 2016 is what I'm working on). <a href="http://mvolo.com/developing-iis7-modules-and-handlers-with-the-net-framework/" class="external-link" rel="nofollow" style="color: #3b73af; text-decoration: none">http://mvolo.com/developing-iis7-modules-and-handlers-with-the-net-framework/</a> is not too bad and better than the same document on the "official IIS site" (<a href="http://iis.net" class="external-link" rel="nofollow" style="color: #3b73af; text-decoration: none">http://iis.net</a>) . All the links are rotten, so expect to google to get any further,
</li>
</ul>
<ul>
<li>
Configuration is funky in IIS. It's really all xml files. Start at <tt>%system32%\Inet\config</tt> and also in <tt>web.config</tt> and <tt>packages.config</tt> in the tree of being served files. .NET applications (as dlls) go into the <tt>bin</tt> subdirectory and then you hack around in webconfig.
</li>
</ul>
<ul>
<li>
the UI does the same for you as does <tt>%system32%\Inet\appcmd.exe</tt>
</li>
</ul>
<ul>
<li>
With the basic handler and module developed I looked at plugging it into Shib, and developed technology to allow objects in .NET to call into objects into C++ and vice versa (so we could surface a .NET handler, but have it call into the <tt>AbstractSPRequest</tt> and have the calls in there call up to .NET). Basically OO between c# and natively compiled C++. I've pushed the example code to a private git repo on git.shibboleth.net (also github)
</li>
</ul>
<ul>
<li>
This is all pretty easy to debug via the VS2015 Remote debugger.
</li>
</ul>
<ul>
<li>
If you think that the .NET documentation for programming IIS was bad it is but nothing to the documentation for the native code. Everything appears to be "Microsoft Documented" which means that foo->GetRequest() is documented as "Get the request from the containing foo object". They really don't want you to go there. Really badly. Think "hidden in a basement with 'beware of the tigers' written on the door".
</li>
</ul>
<ul>
<li>
The example pages on the microsoft.com site look cool until you realize that all the code has been redacted (probably by accident, maybe)
</li>
</ul>
<ul>
<li>
Nonetheless <a href="https://www.iis.net/learn/develop/runtime-extensibility/develop-a-native-cc-module-for-iis" class="external-link" rel="nofollow" style="color: #3b73af; text-decoration: none">https://www.iis.net/learn/develop/runtime-extensibility/develop-a-native-cc-module-for-iis</a> is the place to start. If you search widely enough you can get the zup file with the source (also on iis.net)
</li>
</ul>
<ul>
<li>
But this is incredibly subtly difficult to get to work. I had to
<ul>
<li>
Install the VC redist and build for release (I just did 64 bits on 64 bits, 32 bits might work with the correct massaging)
</li>
<li>
Add the module using appcmd.exe and then for further changes edit the config file. The UI does <b>NOT</b> allow adding native modules.
</li>
<li>
In order to get the module to run it <b>has</b> to be in the <tt>%system32%\insetsrv</tt> dir. Put it somewhere else and IIS will 503 with an inpenetrable message in the event log.
</li>
<li>
In order to debug you have to tell the debugger to attach to the W3WP.EXE process as native.
</li>
<li>
And then you can get called in the magical pre "call" point for all web operations.
</li>
</ul>
</li>
</ul>
<p style="margin: 10px 0 0 0">That's all I know right now. The next stage is to get a debug build to work and then to try and understand what can be achieved, The answer is "Everything" (you appear to be called at a very very low level), so maybe the question is what do we need to intercept and how do we respond.</p>
<p style="margin: 10px 0 0 0">But that's for next week/</p>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td class="email-content-main mobile-expand " style="padding: 0px; border-collapse: collapse; border-left: 1px solid #ccc; border-right: 1px solid #ccc; border-top: 0; border-bottom: 0; padding: 0 15px 0 16px; background-color: #fff">
<table id="actions-pattern" cellspacing="0" cellpadding="0" border="0" width="100%" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px; mso-line-height-rule: exactly; mso-text-raise: 1px">
<tr>
<td id="actions-pattern-container" valign="middle" style="padding: 0px; border-collapse: collapse; padding: 10px 0 10px 24px; vertical-align: middle; padding-left: 0">
<table align="left" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt">
<tr>
<td class="actions-pattern-action-icon-container" style="padding: 0px; border-collapse: collapse; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px; mso-line-height-rule: exactly; mso-text-raise: 0px; vertical-align: middle"> <a href="https://issues.shibboleth.net/jira/browse/SSPCPP-694#add-comment" target="_blank" title="Add Comment" style="color: #3b73af; text-decoration: none"> <img class="actions-pattern-action-icon-image" src="cid:jira-generated-image-static-comment-icon-a42a4e9d-a3aa-43f1-a03c-1465239e33e7" alt="Add Comment" title="Add Comment" height="16" width="16" border="0" style="vertical-align: middle" /> </a>
</td>
<td class="actions-pattern-action-text-container" style="padding: 0px; border-collapse: collapse; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px; mso-line-height-rule: exactly; mso-text-raise: 4px; padding-left: 5px"> <a href="https://issues.shibboleth.net/jira/browse/SSPCPP-694#add-comment" target="_blank" title="Add Comment" style="color: #3b73af; text-decoration: none">Add Comment</a>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
<!-- there needs to be content in the cell for it to render in some clients -->
<tr>
<td class="email-content-rounded-bottom mobile-expand" style="padding: 0px; border-collapse: collapse; color: #fff; padding: 0 15px 0 16px; height: 5px; line-height: 5px; background-color: #fff; border-top: 0; border-left: 1px solid #ccc; border-bottom: 1px solid #ccc; border-right: 1px solid #ccc; border-bottom-right-radius: 5px; border-bottom-left-radius: 5px; mso-line-height-rule: exactly">
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td id="footer-pattern" style="padding: 0px; border-collapse: collapse; padding: 12px 20px">
<table id="footer-pattern-container" cellspacing="0" cellpadding="0" border="0" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt">
<tr>
<td id="footer-pattern-text" class="mobile-resize-text" width="100%" style="padding: 0px; border-collapse: collapse; color: #999; font-size: 12px; line-height: 18px; font-family: Arial, sans-serif; mso-line-height-rule: exactly; mso-text-raise: 2px">
This message was sent by Atlassian JIRA <span id="footer-build-information">(v7.0.10#70120-<span title="37e3d7a6fc4d580639533e7f7c232c925e554a6a" data-commit-id="37e3d7a6fc4d580639533e7f7c232c925e554a6a}">sha1:37e3d7a</span>)</span>
</td>
<td id="footer-pattern-logo-desktop-container" valign="top" style="padding: 0px; border-collapse: collapse; padding-left: 20px; vertical-align: top">
<table style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt">
<tr>
<td id="footer-pattern-logo-desktop-padding" style="padding: 0px; border-collapse: collapse; padding-top: 3px"> <img id="footer-pattern-logo-desktop" src="cid:jira-generated-image-static-footer-desktop-logo-e31e79c8-d001-4980-b412-15dffca14ecc" alt="Atlassian logo" title="Atlassian logo" width="169" height="36" class="image_fix" />
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
</body>
</html>