Data passed by query string in your URL is what's called a GET request, and is available in PHP via the GET array. In other words, if you have the parameter '&serial=123123123' in your URL, you can access that data in any snippet via $_GET['serial']. You don't have to do this with a hook, you could simply run a simple snippet before your register snippet or inside the form itself that passes your GET array into placeholders. Super quick example. Let's say you have a form
<form>
<input type="text" name="serial" value="[[+serial]]" />
</form>
You could create an equally simple snippet, let's call it getSerial, before the form and use it to generate the [[+serial]] placeholder. You could also call the snipped directly in the value attribute itself instead of using a placeholder, but if you're wanting to grab more than one value, you'll need to use placeholders instead so you don't have to call a different snippet for each value. Here's what getSerial might look like:
if (isset($_GET['serial'])){
$modx->setPlaceholder('serial',$_GET['serial']);
}
If you call [[!getSerial]] before your form output, the serial placeholder should contain the value of the &serial parameter in your URL string. Did I understand your question?